升级webpack 5实战

一、背景

本次对公司项目进行webpack的升级 , 原有版本是webpack4.42.1, 本次升级目标是webpack5.28.0,已经是很新的版本了。目标,升级Webpack5,应用长效缓存,提升构建速度。

二、步骤

按照官网升级文档

"vue-loader": "^15.9.6",

"terser-webpack-plugin": "^5.1.1",

"style-loader": "^2.0.0",

"mini-css-extract-plugin": "^1.4.0",

"less-loader": "^8.0.0",

"html-webpack-plugin": "^5.3.1",

"file-loader": "^6.2.0",

"css-loader": "^5.2.0",

"compression-webpack-plugin": "^7.1.2",

"babel-loader": "^8.2.2",

"postcss-loader": "^5.2.0",

原有运行命令

"dev": "webpack-dev-server --inline --progress --config build/webpack.dev.conf.js",

wbepack4X版本使用webpack-dev-server,启动方式为:webpack-dev-server。

webpack5X修改为:webpack server

webpack、webpack-cli、webpack-dev-server是需要版本匹配的

原有匹配版本

"webpack": "^4.42.1",

"webpack-cli": "^3.3.11",

"webpack-dev-server": "^3.10.3",

升级版本

"webpack": "^5.28.0",

"webpack-cli": "^4.6.0",

"webpack-dev-server": "^3.11.2",

运行报错:webpack.NamedModulesPlugin is not a constructor

原有配置文件

plugins: [

new webpack.NamedModulesPlugin(),

],

改成用配置的方式即可

optimization: {

namedModules: true

},

查看文档发布 optimization.namedModules removed (NamedModulesPlugin too) 已经被移除了。

同时在 webpack4 上是默认设置,所以不需要设置这个选项即可。

webpack.HashedModuleIdsPlugin is not a constructor

报错去除

不兼容

报错弃用

new webpack.NamedModulesPlugin()

不兼容

报错弃用

new TerserPlugin(),

new HtmlWebpackPlugin({

chunksSortMode: 'dependency'

}),

报错,新版只支持 'none' | 'auto' | 'manual'

改为

new HtmlWebpackPlugin({

chunksSortMode: 'manual'

}),

webpack5已内置

TerserPlugin去除

devServer去除了很多旧的配置项目

实际上出错信息已经说明了问题原因:

Invalid configuration object. Object has been initialized using a configuration object that does not match the API schema.

这一段的意思是webpack.config.js错误,原因是这个配置文件的版本和我们当前安装的webpack的版本不匹配。

- configuration has an unknown property 'disableHostCheck'.

然后逐步排查,去掉当前安装的webpack版本已经去掉的配置项目。

mode: process.env.NODE_ENV || 'production',

必须配置mode

webpack5移除了node环境的polyfill

需要配置fallback

resolve: {

fallback: {

crypto: false

}

},

configuration.node不兼容

去除了node属性

node: {}

增加属性

optimization: {

chunkIds: "deterministic",

moduleIds: "deterministic",

mangleExports: "deterministic"

},

target: ['web', 'es5'],

// 5特有的文件监听

watchOptions: {

//默认为空,不监听的⽂件或者⽬录,⽀持正则

ignored: /node_modules/,

//监听到⽂件变化后,等300ms再去执⾏,默认300ms,

aggregateTimeout: 300,

poll: config.dev.poll,

},

// 5新增性能优化

performance: {

maxEntrypointSize: 4000000, // 入口起点的最大体积,控制 webpack 何时生成性能提示

maxAssetSize: 1000000, //单个资源体积(单位: bytes),控制 webpack 何时生成性能提示

},

file-loader和url-loader删除

url-loader弃用, 使用 asset modules 代替

资源模块类型(asset module type),通过添加 4 种新的模块类型,来替换所有这些 loader:

asset/resource 发送一个单独的文件并导出 URL。之前通过使用 file-loader 实现。

asset/inline 导出一个资源的 data URI。之前通过使用 url-loader 实现。

asset/source 导出资源的源代码。之前通过使用 raw-loader 实现。

asset 在导出一个 data URI 和发送一个单独的文件之间自动选择。之前通过使用 url-loader,并且配置资源体积限制实现。

在项目中url-loader改用 type: 'asset/resource'的形式

当 webpack 配置中使用了 [hash] 占位符时,请考虑将它改为 [contenthash]。效果一致,但事实证明会更为有效。

三、总结

本次升级已经完成,在性能上,Webpack5除了未修改重编译,其他上表现并不如之前V4的性能好。在未来的工作上,我会继续关注这里性能为什么不如V4。

下面的脚手架是基于@vue/cli 4.5.8 版本构建,已将webpack3.6.0升级到5.28.0,可以直接下载使用。

github地址

喜欢的给个star吧


原文链接:https://jue.leheavengame.com/article/607301c844141670bcfad3c1

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,287评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,346评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,277评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,132评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,147评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,106评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,019评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,862评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,301评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,521评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,682评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,405评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,996评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,651评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,803评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,674评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,563评论 2 352

推荐阅读更多精彩内容