项目中使用兄弟团队开发的一个组件库,组件库中的依赖包含了react-native,然后项目本身也依赖了react-native,一直相安无事。
当时今天重新下载项目代码进行依赖安装调试的时候。。。居然报错了,错误信息如下:
Loading dependency graph...(node:5756) UnhandledPromiseRejectionWarning: Error: jest-haste-map: Haste module naming collision:
Duplicate module name: react-native
看错误信息,是react-native冲突了,使用npm ls
命令查看项目中react-native的版本:
npm ls react-native
显示:
├─┬ xxxxxx@3.1.78
│ └── react-native@0.59.9 deduped
└── react-native@0.59.10
原来是安装了2个不同版本的react-native造成的错误。
为什么突然会出现安装版本不一致的结果呢,立即去检查了package.json中react-native的安装信息:
"react-native": "^0.59.9",
原来是因为react-native使用了^,代表大版本(major verion),这样可能会安装到0.59.xx版本,然后导致安装了2个不同版本react-native版本。
解决办法1,手动去掉^:
"react-native": "0.59.9",
然后执行:
rm -rf node_modules package-lock.json
npm cache clean --force
watchman watch-del-all
npm i
npm start -- --reset-cache
解决办法2
第一个安装成功后,把package-lock.json文件在git中提交,这样npm再次安装时会去读取package-lock中的npm源地址和固定的版本号,不会出现意外升级的问题。