最近,webpack 已经升级到了 v5。相较于之前的版本,v5 有着更好的性能、更多的新特性和更加清晰的代码结构。然而,升级到 v5 可能会带来一些问题。在本篇文章中,我们将重点讲解升级到 webpack v5 之后可能会遇到的问题,并提供解决方案和示例代码。
1. MiniCssExtractPlugin 的默认值
webpack v5 中,MiniCssExtractPlugin
的默认值已经发生了变化。MiniCssExtractPlugin
是一个用于将 CSS 提取为独立文件的插件,常常用于生产环境中。在 webpack v5 之前,MiniCssExtractPlugin
的默认值为 false
,也就是说,在通过这个插件提取 CSS 时,CSS 会默认以内联样式的形式存在,而不是以独立文件的形式存在。
在 webpack v5 中,MiniCssExtractPlugin
的默认值被修改为 true
,也就是说,CSS 会默认以独立文件的形式存在。这会对之前配置的 webpack 构建产生影响,可能会导致构建报错。
解决方案如下:
----- -------------------- - ----------------------------------- -------------- - - ---------- -------------- -------- - --- ---------------------- --------- ------------------------------- -- ------------ ----- -- ------- --- ------- -- ----------- ---- -- ---- ------- - -- ------ --- -- -------------------------------------------------------------------------------- -- ---------- --------- ------ --- -- ------- - ------ - - ----- --------- ---- - ---------- ------- -- - --------------------------- --- -------------- -- -- --- ---------- ---- - --------------- - ------- ---------------------------- -------- --- -- ---------- ------- -- -- -- -- --
2. babel 7 升级到 babel 8
如果我们之前使用的是 babel 7 并且希望升级到 babel 8,那么需要注意以下几点:
@babel/core
在 babel 8 中是必须的,而在 babel 7 中是可选的。需要手动安装和配置@babel/core
。@babel/preset-env
在 babel 8 中应该更新为@babel/env
。@babel/preset-react
在 babel 8 中应该更新为@babel/plugin-transform-react-jsx
。
解决方案如下:
-------------- - - ---------- -------------- ------- - ------ - - ----- -------- ---- - ------- --------------- -------- - -------- - ---------- ------- -- - ------------------- --- ------------ ------------- -- ----------- ------ ----- -- -------- - ---------- ------- -- - --------------------- --- ----------------------------------- ------------------------------------ ----- -- -- -- -------- --------------- -- -- -- --
3. tree shaking 的 bug
在 webpack v5 中,tree shaking
的效果得到了提升。然而,有时候我们会发现 webpack 实际运行的结果与预期不符合。这时,我们需要检查是否存在 tree shaking
的 bug。
解决方案如下:
- 安装
loose-envify
。
--- ------- ---------- ------------
- 更新
uglifyjs-webpack-plugin
的配置。
----- -------------- - ----------------------------------- ----- ----------- - ------------------------ -------------- - - ---------- -------------- ------------- - --------- ----- ---------- - --- ---------------- --------- ----- ------ ----- -------------- - -- ----------- ------- - --------- ------ -- ------- -- --- ---- ------- - --- -- -------------- -- ----------- ----- -- ------------- -- -- --------- - --------- ------ ------------- ----- -- ------ -- --- ---- ------- - --- -- -------------- -- ----------- ------ -------------- ----- -------- ------ ------- -- ------ ----- ------------- ----- -- ------------- -- -- -- --- -- -- -------- - --- ---------------------- ----------------------- --------------------------------- --- ---------- ------- -- --
4. chunkhash 和 contenthash 更新策略
在 webpack v5 中,chunkhash 和 contenthash 的更新策略发生了变化。在之前的版本中,chunkhash 和 contenthash 只有在文件的内容真正发生改变时才会更新。但是,在 webpack v5 中,chunkhash 和 contenthash 会在任何模块的代码发生变化时也会更新。
解决方案如下:
- 将
webpack-md5-hash
替换为mini-css-extract-plugin
。
----- -------------------- - ----------------------------------- --- ---------------------- --------- ------------------------------- ---
- 将
cacheGroups
中的chunks: 'all'
替换为chunks: 'initial'
。
------------- - ------------ - ---------- -------------- ------------ - ---------- ----------- -- -------- --- --------- -- ----------- ------- - ----- ------------------------- ----- --------- ---------- -- ------------------- -- -------- -- --------- ---- ------- ------------ -- ----- - --------- -- ---------- ----------- -- -- --
结论
升级 webpack v5 需要仔细检查配置文件,确保所有的配置都是按照新的标准来完成的。在本文中,我们提供了一些可能出现的问题和相应的解决方案,以及示例代码,希望对大家有所帮助。
来源:JavaScript中文网 ,转载请联系管理员! 本文地址:https://www.javascriptcn.com/post/67233cc32e7021665e0ef32b