我是npm的新手,正在尝试理解如何为部署重新创建node_modules
目录。
我们使用npm ci
而不是npm install
来确保在部署过程中有一个干净的记录。但是,当我们在没有任何标志的情况下运行它时,我们会得到以下错误:
修复上游依赖关系冲突,或使用--force或--legacy-peer-deps重试此命令以接受不正确(可能已损坏)的依赖关系解析。--force
的npm install
的***documentation如下所示(npm ci
的page***上没有标志):
-f或--force参数将强制npm获取远程资源,即使磁盘上存在本地副本。
与此同时,--legacy-peer-deps
的文档说明:
--传统对等部署:安装时忽略所有peerDependencies,采用npm版本4到版本6的样式。
看起来这两个标志都可以让npm ci
生成node_modules
目录,而不会出现任何问题,但是我仍然不清楚两者之间的区别。
据我所知,--force
听起来像是基于最后下载的依赖项,并将覆盖任何以前下载的依赖项。同时,--legacy-peer-deps
听起来像是在安装过程中总是跳过对等依赖项(无论那些是什么),即使没有问题。
这两个标志之间有什么区别,我们应该在什么时候使用它们?
3条答案
按热度按时间yacmzcpb1#
在npm(v7)的新版本中,默认情况下,
npm install
在遇到冲突的 peerDependencies 时会失败,以前不是这样的。在这里查看更多关于npm v7中对等依赖关系的信息。
两者的区别如下-
--legacy-peer-deps
:安装时忽略所有 peerDependencies,使用npm版本4到版本6的样式。--strict-peer-deps
:如果遇到任何冲突的 peerDependencies,则会失败并中止安装过程。默认情况下,npm仅会在根项目的直接依赖项导致 peerDependencies 冲突时崩溃。--force
:将强制npm获取远程资源,即使磁盘上存在本地副本。2w2cym1i2#
In the article npm 7 is now generally available!,
You have the option to retry with
--force
to bypass the conflict or--legacy-peer-deps
command to ignore peer dependencies entirely (this behavior is similar to versions 4-6).I agree this sentence is not really clear, but "ignore peer dependencies entirely" does not sound good. Let's use a real example:
Here is a peer dependency error I met when I
npm install
:Below is the package-lock.json difference between
--legacy-peer-deps
and--force
.npm install --legacy-peer-deps
, it adds this in my package-lock.json:npm install --force
, instead, it addsAs you see,
npm install --force
still pins many dependency versions which is stricter.q8l4jmvw3#
对于那些想知道哪个更安全的人来说,答案是
--force
--legacy-peer-deps
完全忽略对等依赖项,这可能会破坏依赖项解析。另一方面,
--force
简单地为冲突的依赖性设置不同的对等依赖性版本但是使用强制并不总是理想的,因为每个依赖项版本都会占用额外的空间。对许多依赖项使用强制会增加你的总空间需求。