2022 年 3 月 29 日,React 18 正式版发布,带来很多新的能力,React 终于不再支持 IE(前端界的努力,让 IE 去死)。新的版本发布,React 的整体生态圈也会同步更新支持,也就导致 npm 包的依赖不可避免的产生一些混乱。记录下今天小伙伴抛出来的问题。
产生原因:
@types/react-dom 的 package.json 中,dependencies 设置了@types/react 版本为 '*',但是现在最新版本已经是 18. 虽然在 package.json 中指定了 ^17.0.44,但是 @types/react-dom 还是会安装自己的依赖包。
解决办法
- 对于一些hooks库,组件库,本身的依赖,已经在项目中存在了,所以用
peerDependencies声明。 - 在开发的过程中,很可能用到不同版本的同一依赖,比如说项目引入了 A 版本的依赖,组件库引入了 B 版本的依赖。那么这种情况如何处理呢。在
package.json文档中提供了一个resolutions配置项可以解决这个问题,在resolutions中锁定同一的引入版本,这样就不会造成如上存在多个版本的项目依赖而引发的问题。
通过 resolutions 指定版本
在package.json中添加:
"resolutions": { "@types/react": "17.0.44" },
tips: 我用的是 yarn ,如果您使用的是npm 的话,您还需要在 package.json 的 script 中添加如下 preinstall,通过使用npm-force-resolutions包来根据 resolutions 进行版本限定。