vue-cli3使用 DllPlugin 实现预编译,提升构建速度

在项目打包上有两个目标:减少打包代码体积和加快打包速度

1. 减少打包体积:

(1)对于用的比较少的库,可以去掉(我去掉了jquery以及lodash),用到的地方,参考源码自己写

(2)非用不可的又比较大的库(我这里用了monaco-edit),使用cdn方式引入

打包体积减少的情况下,自然速度也会有所提升

2. 加快打包速度:

这里推荐一篇个人感觉很棒的文章 https://juejin.im/post/5bfa696d51882579117f7d26

我目前做了这些:

(1)vue-cli2升级到vue-cli3,顺便webpack2升级到webpack4,构建速度一下子从3分钟左右提升到不到1分钟(vue-cli3升级过程 https://www.cnblogs.com/XHappyness/p/9989693.html)

(2)使用 DllPlugin 进行预编译,过程如下:

·    npm install webpack-cli --save-d

·    独立出一套webpack配置webpack.dll.conf,用dllPlugin定义要打包的dll文件;这里我在根目录下新建webpack.dll.conf.js  内容如下

const path = require("path");
const webpack = require("webpack");

module.exports = {
  entry: {
    vendor: [
      "vue-router/dist/vue-router.esm.js",
      "vuex/dist/vuex.esm.js",
      "axios"
    ]
  },
  output: {
    path: path.join(__dirname, "public/vendor"),
    filename: "[name].dll.js",
    library: "[name]_[hash]" // vendor.dll.js中暴露出的全局变量名
  },
  plugins: [
    new webpack.DllPlugin({
      path: path.join(__dirname, "public/vendor", "[name]-manifest.json"),
      name: "[name]_[hash]",
      context: process.cwd()
    })
  ]
};

注意;在vue-cli3中一定要把生成的dll放到public中或者自己去配置 publicPath (没仔细看文档掉进坑)

·    package.json中定义运行webpack.dll.conf.js的命令

{
···
  "scripts": {
    "serve": "npm link typescript && vue-cli-service serve",
    "dll": "webpack -p --progress --config ./webpack.dll.conf.js",
···
  },
···
}

·    运行npm run dll命令生成dll

·    index.html中加载生成的dll文件

<script src="./vendor/vendor.dll.js"></script>

·    以上已经完成预编译并载入;但是一定不要忘记webpack构建时告诉webpack哪些文件已被预编译,使构建过程忽略这些已预编译的文件;

具体做法就是在vue.config.js的配置文件中添加

const webpack = require("webpack");

module.exports = {
···
  configureWebpack: {
    plugins: [
      new webpack.DllReferencePlugin({
        context: process.cwd(),
        manifest: require("./public/vendor/vendor-manifest.json")
      })
    ]
  }
···
}

  

(3) 对于happyPack的使用,因为我这里打包速度基本在30s左右,所以就没深究

原文地址:https://www.cnblogs.com/XHappyness/p/10343010.html

时间: 2024-10-10 21:19:06

vue-cli3使用 DllPlugin 实现预编译,提升构建速度的相关文章

IIS预编译提升载入速度

当我们把站点部署在IIS7或IIS6S的时候,每当IIS或是ApplicationPool重新启动后,第一次请求站点反应总是非常慢.原因大家都知道(不知道能够參考这个动画说明ASP.NET网页第一个Request会比較慢的原因). 所以每次站点更新都会给第一个用户代号不好的用户体验,因此之前大家得通过撰写仿真模拟訪问动作或预编译来解决此问题.但自从Windows 2012出来之后.这部分ApplicationInitialization功能已经有内含在IIS8之中.能够直接进行设定就能够.只是微

Docker实用技巧之更改软件包源提升构建速度

一.开篇 地球,中国,成都市,某小区的阳台上,一青年负手而立,闭目沉思,阵阵的凉风吹得他衣衫呼呼的飘.忽然,他抬起头,刹那间,睁开了双眼,好似一到精光射向星空,只见这夜空......一颗星星都没有.他叹了下气,"今日夜观星象,看来是时候了."他走到电脑桌前,双手不断的做出各种手势,同时口中念着晦涩难懂的语言--嘛咪嘛咪哄,最后只见他将一只手放在了笔记本电脑上,同时大喊:"出来吧!我的皮卡丘.",只见贴在笔记本电脑上的一张泛黄的写着奇怪文字和图案的纸在燃烧,好像在进行

IIS预编译提升加载速度

当我们把网站部署在IIS7或IIS6S的时候,每当IIS或是ApplicationPool重启后,第一次请求网站反应总是很慢,原因大家都知道(不知道可以参考这个动画说明ASP.NET网页第一个Request会比较慢的原因).所以每次网站更新都会给第一个用户代号不好的用户体验,因此之前大家得通过撰写仿真模拟访问动作或预编译来解决此问题.但自从Windows 2012出来之后,这部分ApplicationInitialization功能已经有内含在IIS8之中,可以直接进行设定就可以.不过微软也发布

前端优化:DNS预解析提升页面速度

在网页体验中我们常会遇到这种情况,即在调用百度联盟.谷歌联盟以及当前网页所在域名外的域名文件时会遇到请求延时非常严重的情况.那么有没有方法去解决这种请求严重延时的现象呢? 一般来说这种延时的原因不会是对方网站带宽或者负载的原因,那么到底是什么导致了这种情况呢.假设是DNS的问题,因为DNS解析速度很可能是造成资源延时的最大原因.于是在页面header中添加了以下代码(用以DNS预解析): <meta http-equiv="x-dns-prefetch-control" cont

JavaScript 预编译(变量提升和函数提升的原理)

本文部分内容转自https://www.cnblogs.com/CBDoctor/p/3745246.html 1.变量提升 1 console.log(global); // undefined 2 var global = 'global'; 3 console.log(global); // global 4 5 function fn () { 6 console.log(a); // undefined 7 var a = 'aaa'; 8 console.log(a); // aaa

js 预编译环节的变量提升

有些东西需要先告诉你怎么用,再去理解定义 关于变量的提升 function test () { console.log(a) var a = 100 console.log(a) }; test () // undefined // 100 执行步骤 function test () { var a = undefined console.log(a) a = 100 console.log(a) } 关于函数的提升 function test () { console.log(a) funct

js预编译环节 变量声明提升 函数声明整体提升

预编译四部曲 1.创建AO对象 2.找形参和变量声明,将变量和形参名作为AO属性名,值为undefined 3.将实参和形参统一 4.在函数体里面找函数声明,值赋予函数体 function fn(a){ console.log(a) //function a(){} var a = 123; console.log(a)//123 function a(){} console.log(a)//123 var b = function(){} console.log(b) //function()

一张图掌握移动Web前端所有技术(大前端、工程化、预编译、自动化)

你要的移动web前端都在这里! 大前端方向:移动Web前端.Native客户端.Node.js. 大前端框架:React.Vue.js.Koa 跨终端技术:HTML 5.CSS 3.JavaScript 跨平台框架:React Native.Cordova 前端工程化:Grunt.Gulp.Webpack 前端预编译:Babel.Sass.Less 自动化测试:Jasmine.Mocha.Karma 一图在手,应有尽有! 更多信息参考:https://item.jd.com/12170351.h

JavaScript的预编译和执行

JavaScript引擎,不是逐条解释执行javascript代码,而是按照代码块一段段解释执行.所谓代码块就是使用<script>标签分隔的代码段. 整个代码块共有两个阶段,预编译阶段和执行阶段 一.编译阶段 对于常见编译型语言(例如:Java)来说,编译步骤分为:词法分析->语法分析->语义检查->代码优化和字节生成. 对于解释型语言(例如JavaScript)来说,通过词法分析和语法分析得到语法树后,就可以开始解释执行了. (1)词法分析是将字符流(char strea