刚刚对我们前端项目做了一顿分析优化操作,因为接手时每次构建要花两分钟左右的时间,实在忍受不了,只能动手了。通过这次优化,重新温习了下 webpack 的一些知识。接下来会关于 webpack 展开写几篇心得:
好了,进入主题,本篇主要是介绍生产环境构建优化(包含速度、体积)。
1. 版本升级
建议更新到最新稳定版本,为什么呢?可以看我上一篇开发环境构建优化。
2. devtool
不设置 devtool 或者设置如下:
1 | module.exports = { |
为什么呢?可以看我上一篇开发环境构建优化。
3. optimization 优化
一些 plugin 比如压缩混淆在开发环境是没有意义的,所以需要写两份不同的配置文件,防止这些插件作用在开发环境。
以下配置用于生产环境,可以优化生产环境构建:
1 | module.exports = { |
4. clean-webpack-plugin
用于清除之前构建生成的 dist 目录的文件。
1 | var CleanWebpackPlugin = require('clean-webpack-plugin'); |
5. HashedModuleIdsPlugin
该插件会根据模块的相对路径生成一个四位数的 hash 作为模块 id, 建议用于生产环境。具体可以看官网
1 | module.exports = { |
6. DllPlugin
注意:重要优化手段, 是什么,这里不做介绍了,可以查看官网介绍
下面是我的一些配置,可以参考下:
1 | // webpack.dll.js |
7. assets-webpack-plugin
使用 DLL & DllReference 后,第三方库的确前置构建了,但是如何让打包出来的 bundle 文件在 index.html 中引用呢?如果 output.fileName 写死名字,在 index.html 中也写死,就没有了强缓存,如果 ouput.fileName=[name].[hash].js,就得找到一个往 html 里添加 js 的办法
有了这个插件,看起来就行得通了,在打包第三库时使用 assets-webpack-plugin 将 bundle 的文件名输出,保存成 json,在打包业务代码时配合 html-webpack-plugin 插件,将 bundle 添加到 index.html 中
该插件生成一个记录了版本号的文件;详细的可以看官网地址
1 | var AssetsPlugin = require('assets-webpack-plugin'); |
我的 dll-bundle.json 如下:
1 | {"baiduMap":{"js":"/dist/dlls/baiduMap.dll.6c409412.js"},"vendors":{"js":"/dist/dlls/vendors.dll.6c409412.js"}} |
8. 其他
我上一篇开发环境用到的文件压缩和 CDN …,这些在生产环境也可以用,看你的需求了。
大家还有没有其他的优化黑魔法,欢迎大家留言交流,共同学习成长。