项目背景
一个五年持续迭代但是构建没有升级过的项目,页面多达265个。用vue-cli1开出来的项目,基于webpack1,新增插件基本无法兼容。构建速度持续递增。
优化结果
时间统计于统一配置下的容器内打包
| |首次|第二次无修改|第二次路由页面修改| |—-|—-|—-| |webpack1|6 分 7 秒|4 分 0 秒|3 分 56 秒| |webpack5|1 分 57 秒|13 秒| 57 秒|
升级过程
待完善,先记录遇到的问题
问题
hot reload 无效
// webpack.config.js
{
...
target:web,
}
设置 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!../..
// webpack.config.js
{
loader: MiniCssExtractPlugin.loader,
options: {
esModule: false,
},
}
参考:https://github.com/vuejs/vue-loader/issues/1742#issuecomment-715882675
exports is not defined
// commonjs esmodule 混打?
// babel.config.js
{
...
plugins: [
...
'@babel/plugin-transform-modules-commonjs',
]
}
// 尽管加了插件,仍不支持一个文件混用两种导出模块的方式
参考:https://www.npmjs.com/package/@babel/plugin-transform-modules-commonjs
Module not found: Error: Can’t resolve ’timers’ in xxxxx
// yarn add timers-browserify
// webpack.config.js
resolve: {
...
fallback: {
timers: require.resolve('timers-browserify'),
fs: false
}
}
参考:https://www.npmjs.com/package/timers-browserify
设置port 80之后,macOS下仍然跑1024端口
mac下需要加sudo才可以跑1024以下的端口,加上sudo命令即可
host/charles 代理之后 dev hot reload 失效
// webpack dev server
{
...
devServer: {
...
disableHostCheck: true,
}
}
esmodule/commonjs 混打, vant 重复打包
// babel.config.js
// 调整插件位置
{
plugins: [
'@babel/plugin-transform-modules-commonjs',
'@babel/plugin-transform-runtime',
[
'import',
{
libraryName: 'vant',
style: true
},
'vant'
]
]
}
// 修改为
{
...
plugins: [
[
'import',
{
libraryName: 'vant',
style: true
},
'vant'
],
'@babel/plugin-transform-modules-commonjs',
'@babel/plugin-transform-runtime',
]
}