webpack1 升级到 webpack5
项目背景
一个五年持续迭代但是构建没有升级过的项目,页面多达265个。用vue-cli1开出来的项目,基于webpack1,新增插件基本无法兼容。构建速度持续递增。
优化结果
时间统计于统一配置下的容器内打包
| |首次|第二次无修改|第二次路由页面修改|
|—-|—-|—-|
|webpack1|6 分 7 秒|4 分 0 秒|3 分 56 秒|
|webpack5|1 分 57 秒|13 秒| 57 秒|
升级过程
待完善,先记录遇到的问题
问题
hot reload 无效
1 | // webpack.config.js |
设置 target:web 后, dev server 启动后浏览器报错 arguments is not defined
检查相关代码是否在箭头函数里使用了 arguments,改过来即可
export ‘default’ (exported as ‘default’) was not found in ‘-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js!../..
1 | // webpack.config.js |
参考:https://github.com/vuejs/vue-loader/issues/1742#issuecomment-715882675
exports is not defined
1 | // commonjs esmodule 混打? |
参考:https://www.npmjs.com/package/@babel/plugin-transform-modules-commonjs
Module not found: Error: Can’t resolve ‘timers’ in xxxxx
1 | // yarn add timers-browserify |
参考:https://www.npmjs.com/package/timers-browserify
设置port 80之后,macOS下仍然跑1024端口
mac下需要加sudo才可以跑1024以下的端口,加上sudo命令即可
host/charles 代理之后 dev hot reload 失效
1 | // webpack dev server |
esmodule/commonjs 混打, vant 重复打包
1 | // babel.config.js |