在项目打包上有两个目标:减小打包代码体积和加快打包速度javascript
1. 减小打包体积:html
(1)对于用的比较少的库,能够去掉(我去掉了jquery以及lodash),用到的地方,参考源码本身写vue
(2)非用不可的又比较大的库(我这里用了monaco-edit),使用cdn方式引入java
(3)按需加载jquery
(路由懒加载配合webpack'的require.ensure实现: 其实总的体积并没变,可是会提升首页加载速度)webpack
2. 加快打包速度:ios
这里推荐一篇我的感受很棒的文章 https://juejin.im/post/5bfa696d51882579117f7d26web
我目前作了这些:vue-router
(1)vue-cli2升级到vue-cli3,顺便webpack2升级到webpack4,构建速度一会儿从3分钟左右提高到不到1分钟(vue-cli3升级过程 https://www.cnblogs.com/XHappyness/p/9989693.html)vuex
(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多线程打包