记一次实际工作中Webpack打包优化
图片来自网络
CommonsChunk
(不开启动态加载情况) 单独打包
node_modules
生成modules.[chunkhash:8].js
,业务代码修改对其没有影响,提高缓存利用率(开启动态加载情况) Dynamic Imports Code Splitting后,提取chunks公共代码生成
commons.[chunkhash:8].async.js
减小打包总体积修改配置(不开启动态加载情况)
1
2
3
4
5
6commons: [{
name: 'modules',
minChunks: function (module) {
return module.context && module.context.includes('node_modules');
},
}],TODO
- 提取
node_modules
下的包采用路径匹配方式,开启Dynamic Imports
后修改业务代码会导致modules
包hash
值变化 BizCharts
、DataSet
包体积较大,在index.html中加载对独立的H5页面会有影响,按需加载首次进入图表页面又会比较慢- 根据
src/router.js
进行Dynamic Imports
,保持同一站点页面访问的流畅度,不然每进入一个页面都会有loading
- 提取
参考资料
- CommonsChunkPlugin,webpack4后改用SplitChunksPlugin
- af-webpack配置
TreeShaking
roadhog改造:
- 执行流程:
roadhog dev -> getUserConfig -> use babel-preset-umi -> getWebpackConfig -> getConifg -> startDevServer - babel配置项:ry-roadhog
- 执行流程:
修改配置
1
2
3babel: {
env: { modules: false },
}TODO:
- 设置
modules: false
后测试浏览器兼容性
- 设置
参考资料:
浏览器缓存
Nginx ETag算法,根据文件最后修改的时间和内容长度生成,在通过
scp
命令上传的时候会改变时间导致Etag
失效通过比较新旧打包文件名(文件名带了
hash
值或版本号)来判断根目录的js
、css
是否需要上传,参考脚本
赏
微信打赏
赞赏是不耍流氓的鼓励