使用--force或--legacy-peer-deps安装npm依赖长期运行是否有危害?
依赖安装报错与参数风险说明
报错详情
本次安装native-base触发的是npm 7+版本引入的严格peer依赖校验规则,报错日志如下:
npm ERR! ERESOLVE unable to resolve dependency tree npm ERR! npm ERR! While resolving: demo@0.0.1 npm ERR! Found: react@17.0.2 npm ERR! node_modules/react npm ERR! react@"^17.0.1" from the root project npm ERR! peer react@"*" from native-base@3.0.6 npm ERR! node_modules/native-base npm ERR! native-base@"3.0.6" from the root project npm ERR! 1 more (react-dom) npm ERR! npm ERR! Could not resolve dependency: npm ERR! peer react@"17.0.1" from react-native@0.64.2 npm ERR! node_modules/react-native PS C:\Users\Bishal Ghosh\Desktop\React-Native\demo> npm install native-base --save npm ERR! code ERESOLVE npm ERR! ERESOLVE unable to resolve dependency tree npm ERR! npm ERR! While resolving: demo@0.0.1 npm ERR! Found: react@17.0.2 npm ERR! node_modules/react npm ERR! react@"^17.0.1" from the root project npm ERR! peer react@"*" from native-base@3.0.6 npm ERR! node_modules/native-base ERR! native-base@"*" from the root project npm ERR! 1 more (react-dom) npm ERR! npm ERR! Could not resolve dependency: npm ERR! peer react@"17.0.1" from react-native@0.64.2 npm ERR! node_modules/react-native npm ERR! react-native@"^0.64.2" from the root project npm ERR! peer react-native@"*" from native-base@3.0.6 npm ERR! node_modules/native-base npm ERR! native-base@"*" from the root project npm ERR! npm ERR! Fix the upstream dependency conflict, or retry npm ERR! this command with --force, or --legacy-peer-deps npm ERR! to accept an incorrect (and potentially broken) dependency resolution. npm ERR! npm ERR! See C:\Users\Bishal Ghosh\AppData\Local\npm-cache\eresolve-report.txt for a full report. npm ERR! A complete log of this run can be found in: npm ERR! C:\Users\Bishal Ghosh\AppData\Local\npm-cache\_logs\2021-08-02T06_48_53_257Z-debug.log
两个参数的作用与风险
--legacy-peer-deps:该参数会让npm回退到v6及更早版本的依赖处理逻辑,跳过peer依赖的版本校验,不会强制要求依赖声明的版本和项目实际安装的版本匹配。你本次遇到的冲突是react-native 0.64.2要求peer依赖react为17.0.1,而项目实际安装的是17.0.2,属于同一个大版本下的小版本差异,没有破坏性变更,使用该参数安装不会引发运行问题。--force:该参数的强制程度更高,哪怕是同一个包存在多版本冲突,也会强制覆盖安装,风险远高于前者,非必要不建议使用。
长期使用的潜在影响
- 若后续安装的依赖存在跨大版本的peer依赖冲突,比如要求react@16但项目实际用react@18,强行加参数安装大概率会出现运行时报错、功能异常甚至直接崩溃的问题。
- 多人协作场景下,如果仅你本地使用该参数安装,其他协作者的默认npm配置开启严格校验的话,拉取代码后会无法正常安装依赖,除非项目根目录新增.npmrc文件统一配置
legacy-peer-deps=true。 - 后续升级依赖时,版本冲突问题会被掩盖,容易出现明明依赖版本不兼容却排查不到原因的运行时问题,排查成本会大幅提升。
本场景优化建议
如果不想每次安装都加参数,可以手动将项目package.json中的react版本改为17.0.1,重新安装依赖后即可完全消除冲突。
内容的提问来源于stack exchange,提问作者Bishal Ghosh
相关产品推荐
相关产品推荐

