🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
## 1. webpack3.x优化打包速度 我们执行一下`npm run build`,结果如下: ![image-20190307161705933](/Users/best9/Library/Application Support/typora-user-images/image-20190307161705933.png) 整个打包过程花了32s左右,现在我们的项目只是引入了相关的依赖,一些业务逻辑还没有写,打包速度就那么慢了,等到我们写完整个项目,打包速度还会继续变长,所以我们需要优化一下。 > 优化打包速度,我们修改的主要是`webpack.prod.conf.js`文件 #### 替换代码压缩工具 Webpack 默认提供的 UglifyJS 插件,由于采用单线程压缩,速度慢 ; [webpack-parallel-uglify-plugin](https://www.npmjs.com/package/webpack-parallel-uglify-plugin) 插件可以并行运行 UglifyJS 插件,更加充分而合理的使用 CPU 资源,这可以大大减少的构建时间; ```js //安装 cnpm i webpack-parallel-uglify-plugin -D ``` ```js //配置 webpack.prod.conf.js //首先删除项目中的 UglifyJsPlugin插件及配置,第二次打包时提高速度,要把.cache文件加入到gitignore中 // new webpack.optimize.UglifyJsPlugin({ // compress: { // warnings: false, // drop_console: true // }, // sourceMap: true // }), //然后引入并使用我们刚才装的插件 ``` ==注意:版本控制工具提交时,要忽略.`cache`文件== 配置完后我们执行`npm run build`,发现打包速度降到了23s ![image-20190307162957635](https://ws2.sinaimg.cn/large/006tKfTcgy1g0ubaabq52j30b202i74b.jpg) 再执行一次`npm run build`,发现打包速度降到了12s ![image-20190307164513348](https://ws3.sinaimg.cn/large/006tKfTcgy1g0ubq4d17kj308p0240sr.jpg) 时间降低那么多是因为文件没有改动,直接利用了缓存中的js文件 #### happypack开启多核构建项目 一般node.js是单线程执行编译,而happypack则是启动node的多线程进行构建,大大提高了构建速度。 首先安装, 修改`webpack.base.conf.js` ```js const HappyPack = require('happypack'); const os = require('os'); const happyThreadPool = HappyPack.ThreadPool({ size: os.cpus().length }); ... ... // 增加plugins plugins: [ new HappyPack({ id: 'happy-babel-js', loaders: ['babel-loader?cacheDirectory=true'], threadPool: happyThreadPool, }) ] ... ... // 修改对应loader { test: /\.js$/, loader: 'happypack/loader?id=happy-babel-js', include: [resolve('src'), resolve('test')], } ``` 配置完成,执行`npm run build` ![image-20190307165549102](https://ws4.sinaimg.cn/large/006tKfTcgy1g0uc152zllj309l01yjre.jpg) what??并没有提高速度 不要用这个鬼东西了 #### hardSourceWebpackPlugin节省70%的时间 > https://github.com/mzgoddard/hard-source-webpack-plugin ```shell #安装 cnpm install --save-dev hard-source-webpack-plugin ``` 使用,在webpack.prod.conf.js中引入并使用 ```js const HardSourceWebpackPlugin = require('hard-source-webpack-plugin'); module.exports = { context: // ... entry: // ... output: // ... plugins: [ new HardSourceWebpackPlugin() ] } ``` 结果: ![image-20190307171310562](https://ws4.sinaimg.cn/large/006tKfTcgy1g0ucj7tx08j30ji03f0td.jpg) 注:要第二次打包才生效 总结下,使用了三个插件,我们的打包速度从30s降低到4s,awesome!