起因:热更新太慢了,想改成mfsu,于是直接来一波大升级。(主要需求空缺,今天闲着没事)
本地 node是14.21.3
首先,我是直接删除node_modules以绝后患。
package.json
更改react版本
"react": "^18.2.0",
"react-dom": "^18.2.0"
更改umi版本
"umi": "^4.0.40",
更改@type
"@types/node": "^18.11.11",
"@types/react": "^18.0.26",
"@umijs/max": "4.0.40"
更改启动命令
umi dev(build) -> max dev(build)
umi g tmp -> max setup
直接yarn 开整
- ok第一个问题
fatal - AssertionError [ERR_ASSERTION]: Invalid config values: dva
Invalid value for dva:
"hmr" is not allowed
发现是yarn.lock忘记删了,删除掉重新yarn 2. 继续报错
error commander@12.0.0: The engine "node" is incompatible with this module. Expected version ">=18". Got "14.21.3"
找半天也没找到那配置的,而且也不可能把node升到18,于是 暂且
yarn config set ignore-engines true ok,继续
- 又报了第一个错误,good,看来还是得仔细检查一下,又翻了一遍官方文档发现是hmr属性umi4不再支持,如下在config.ts中
- 继续报错
fatal - AssertionError [ERR_ASSERTION]: Invalid config keys: nodeModulesTransform, dynamicImport
好像是一些配置无效了,依然是config.js 删除掉就好
至此安装依赖完成,尝试启动
- 第一个错误,一堆插件引入失效,看上去很可怕,首先dva相关。查阅百度,umi/max不再支持dva:{}这种约定式配置了。创建新项目时会自动安装,但半路升级就得手动引入了
yarn add @umijs/plugin-dva
这里主要使用npm或者yarn需要和上边保持一致,否则会冲突
配置 plugins: ['@umijs/plugins/dist/dva'],
这个时候疯狂报
fatal - Error: Register plugin E:/aproduct/test/ark-datawarehouse-
pc/node_modules/@umijs/plugin-dva/lib/index.js failed, since Cannot read property 't' of undefined
或者
fatal - AssertionError [ERR_ASSERTION]: plugin ./node_modules/@umijs/plugins/dist/dva is
already registered by E:/aproduct/test/ark-datawarehouse-
pc/node_modules/@umijs/plugins/dist/dva.js, plugin from E:/aproduct/test/ark-datawarehouse-
pc/node_modules/@umijs/plugins/dist/dva.js register failed.
查了一小时百度没搞好,好吧裂开,踩坑了。于是删掉lock和依赖还有.umi。
再次查看官方文档。将comfig.ts修改为如下.根据官方文档说。umi4不需要显示配置插件。只需要model:{}即可。这次貌似跑起来了。
ok,至此umi相关基本正常了。还会报一些依赖引入的问题,不过不是什么大问题了,这个因项目而异。 (结尾ps: 遇到了@withAliveScope这种写法的一个组件,百度也没查明白。第一反应就是好像spring的注解啊,js也能这么写嘛?---更新:后边搞明白了,类似keep alive做缓存用的,但由于暂不准备学react系源码,所以原理暂不剖析)
团队今年决定大刀阔斧,对后台项目做一次统一的升级。umi从3到umi/max react升18 antd统一升4.x pro-component升2.x
再补充几个坑点:
1:umi/max 不再支持 document.ejs ,里边的引用需要单独配置 2:history.listen监听问题,效果不同于umi3。需根据业务具体改变实现逻辑