项目背景
公司项目需要将进行微前端改造.主应用和子应用会需要共享依赖,考虑使用模块联邦进行依赖共享.
由于模块联邦要升级到webpack 5
才能用,所以老项目要从webpack 4
升级到webpack 5
实现思路
原来的项目用的是vue-cli 3
,查了一下可以vue-cli 5
用的就是webpack 5
,所以可以直接将vue-cli3 ->5
就可以了
具体实现
参考vue-cli
的文档Migrate from v4
npm update-g @vue/cli
- 将所有带有@vue/cli-的全部升级到最新
disableHostCheck
改成allowedHosts: 'all'
遇到的问题
webpack4->5
有很多破坏性升级 从 v4 升级到 v5 | webpack 中文文档
cannot resolve corejs
->core-js
找不到,需要下载并显式指定
npm i corejs
(下2下3都行,我下的是3)
需要在vue.config.js
中显式指定
presets: [
['@vue/app',
//显式指定core-js版本
{
'useBuiltIns': 'usage',
'corejs': '3.39.0'//指定用的corejs版本
}]
],
默认不再包含
Node.js
核心模块的polyfills
需要重新安装
2.1. path需要安装
2.2.process.env
需要安装插件DefinePlugin
或EnvironmentPlugin
(但是vue-cli
本身就是用的这两个注入环境变量的script-ext-html-webpack-plugin
不再适配webpack 5
,需要去掉css
失效->sass
,sass-loader
升级
4.1.sass-loader
:^7.1.0
->^12.0.0
4.2.sass
:1.26.10
->^1.26.10
>>>
样式穿透失效需改用::v-deep
5.1.>>>
深度选择器不是标准的css
选择器,vue-loader 15
以上已经弃用,vue-cli 5
用的17+的vue-loader
就不支持了
Migrating from v14 | Vue Loader
5.2.>>>
和sass的语法冲突,sass 解析器可能会将其误解为多个连续的>
操作符,多个连续的>
操作符在sass和css中都没有意义
参考链接:
https://p2yang.github.io/blog/upgrade-webpack5
https://blog.csdn.net/Note_creek/article/details/129714938
https://juejin.cn/post/7083146700939853832
https://blog.csdn.net/sinat_31213021/article/details/134195881
https://blog.csdn.net/m0_37937502/article/details/124986762