前言
最近一个后台管理项目中我集成了tailwindcss
框架;在公司的电脑上npm install
是没问题的,到家里的电脑npm install
就报错; 报错日志如下:
# npm resolution error report
2021-05-22T14:02:27.205Z
While resolving: ymsh@1.0.0
Found: postcss@7.0.35
node_modules/postcss
postcss@"^7.0.35" from the root project
Could not resolve dependency:
peer postcss@"^8.0.0" from postcss-cli@8.3.1
node_modules/postcss-cli
postcss-cli@"^8.3.1" from the root project
Fix the upstream dependency conflict, or retry
this command with --force, or --legacy-peer-deps
to accept an incorrect (and potentially broken) dependency resolution.
Raw JSON explanation object:
{
"code": "ERESOLVE",
"current": {
"name": "postcss",
"version": "7.0.35",
"whileInstalling": {
"name": "ymsh",
"version": "1.0.0",
"path": "F:\\代码\\ymsh-shopadmin"
},
"location": "node_modules/postcss",
"dependents": [
{
"type": "prod",
"name": "postcss",
"spec": "^7.0.35",
"from": {
"location": "F:\\代码\\ymsh-shopadmin"
}
}
]
},
"edge": {
"type": "peer",
"name": "postcss",
"spec": "^8.0.0",
"error": "INVALID",
"from": {
"name": "postcss-cli",
"version": "8.3.1",
"whileInstalling": {
"name": "ymsh",
"version": "1.0.0",
"path": "F:\\代码\\ymsh-shopadmin"
},
"location": "node_modules/postcss-cli",
"dependents": [
{
"type": "prod",
"name": "postcss-cli",
"spec": "^8.3.1",
"from": {
"location": "F:\\代码\\ymsh-shopadmin"
}
}
]
}
},
"peerConflict": null,
"strictPeerDeps": false,
"force": false
}
家里的node -v 是14.16 跟公司一样,唯独是 npm 版本不一样:家里的是 npm 7.6.1
上述报错日志中有个关键字眼:this command with --force, or --legacy-peer-deps
Fix the upstream dependency conflict, or retry
this command with --force, or --legacy-peer-deps
to accept an incorrect (and potentially broken) dependency resolution.
于是我查了一下是什么意思:
辗转搜索得出这样的答案:
修复上游依赖性冲突,或使用--force
或--legacy-peer-deps
重试此命令,以接受不正确的(并且可能会损坏的)依赖性解析。
-f或–force参数将强制npm获取远程资源,即使磁盘上存在本地副本也是如此。
同时,用于的文档--legacy-peer-deps
说:
–legacy-peer-deps:安装时忽略所有peerDependencies
,其样式为npm版本4到版本6。
在新版本的npm(v7)中,默认情况下,npm install
当遇到冲突的peerDependencies
时将失败。以前不是那样的。
两者之间的区别如下-
--legacy-peer-deps
:安装时忽略所有peerDependencies
,采用npm版本4到版本6的样式。
--strict-peer-deps
:遇到任何冲突的peerDependencies时
,失败并中止安装过程。默认情况下,npm仅会因根项目的直接依赖关系而导致的peerDependencies
冲突而崩溃。
以上是英文文献翻译过来的,是有点生硬:我简单总结一下:
在新版本的npm(v7)中,默认情况下,npm install
当遇到冲突的peerDependencies
时将失败。不会继续安装,并提示:
Fix the upstream dependency conflict, or retry
this command with --force, or --legacy-peer-deps
to accept an incorrect (and potentially broken) dependency resolution.
这样的关键字,这是npm版本的依赖冲突的提示使然,
那么npm:何时使用--force
和--legacy-peer-deps
?
--force
会无视冲突,并强制获取远端npm
库资源,即使本地有资源也会覆盖掉
--legacy-peer-deps
:安装时忽略所有peerDependencies
,忽视依赖冲突,采用npm版本4到版本6的样式去安装依赖,已有的依赖不会覆盖,。
建议用--legacy-peer-deps
比较保险一点,反正我用了就安装成功了;
希望能解决你的问题,长期更新npm报错相关的问题;欢迎大家一起探讨!