好处:提高打包速度。 亲测run build时间从 18s -> 16s
打包工具对业务代码本身无影响,理论是越先进越好
1. package.json 的依赖升级
以下几个包最好都升级到最新版本
{
"vue-loader": "^15.9.6",
"webpack": "^5.26.0",
"webpack-cli": "^4.5.0",
"webpack-dev-server": "^3.11.2",
"terser-webpack-plugin": "^5.1.1",
"html-webpack-plugin": "^5.3.1",
}
启动方式改变
"scripts": {
// 旧的
"dev": "webpack-dev-server --open --hot --env.NODE_ENV=development --progress --mode=development",
"build": "webpack --inline --env.NODE_ENV=production --progress --mode=production --hide-modules",
// 换成新的
"dev": "webpack serve --open --hot --progress --mode=development",
"build": "webpack --progress --mode=production",
}
2. webpack.config.js 环境变量变了
// 旧的
module.exports = (env) => {
}
// 新的, 增加一个argv参数, 然后webpack.config.js内全局替换: env.NODE_ENV -> argv.mode
module.exports = (env, argv) => {
}
3. 增加 target: ‘web’ 否则无法热更新
{
target: 'web', // 在 entry和output 同级位置添加这一行
entry: './src/main.js',
output: {},
...
}
4. 报错: Compiling RuleSet failed: A Rule must not have a ‘options’ property when it has a ‘use’ property
在 Webpack 最新版本中,rules 属性中的配置,可以有 test、exclude、use、include 等字段,但不允许有 options 了;如果需要,可以写成下面这样:
module: {
rules: [
// 旧写法(报错)
{
test: /\.js$/,
include: /src/,
loader: 'babel-loader',
options: {
cacheDirectory: true
}
},
// 新写法
{
test: /\.js$/,
include: /src/,
use: {
loader: 'babel-loader',
options: {
cacheDirectory: true
}
}
},
// 旧写法
{
test: /\.(png|jpg|gif)$/,
loaders: [
'url-loader?limit=30720&name=img/[name].[ext]'
]
},
// 新写法
{
test: /\.(png|jpg|gif)$/,
use: [
'url-loader?limit=30720&name=img/[name].[ext]'
]
},
]
}
5. 报错: TypeError: Cannot read property ‘PROCESS_ASSETS_STAGE_OPTIMIZE_INLINE’ of undefined
speed-measure-webpack-plugin 这个插件不能在用了 ┭┮﹏┭┮
跟此插件有关的代码都要注释掉
需要监控打包时间的话:可以用progress-bar-webpack-plugin
(原创整理,有疑问可以私信。如果有用,谢谢点赞~)