如何将 npm 依赖项添加为对等依赖项

Posted

技术标签:

【中文标题】如何将 npm 依赖项添加为对等依赖项【英文标题】:How to add npm dependency as peer dependency 【发布时间】:2020-07-21 16:31:27 【问题描述】:

npm 是否可以选择将依赖项安装为对等依赖项,例如 yarn 选项 --yarn,而不是手动添加例如:

"peerDependencies": 
  "@angular/core": "^7.0.0"


更新更多地澄清问题,感谢@Broncha

问题是如何向项目添加对等依赖项。那是

npm i dep 将依赖添加到 package.json 中的“依赖项”中, npm i -D dep 将依赖项添加到 package.json 中的“devDependencies”。

如何安装将其添加到 package.json 中“peerDependencies”的依赖项?

【问题讨论】:

这能回答你的问题吗? How to install npm peer dependencies automatically? @MwamiTovi 很遗憾,不,我需要在我的项目中添加对等依赖项,所以我应该手动将其添加到 peerDependencies 中吗? 是的,如该答案中所述,您必须手动处理peer-dependencies 我喜欢每个人都在同一个潮流中回答如何安装对等依赖项,而问题是如何向项目添加对等依赖项。即npm i dep,将依赖添加到package.json中的“dependencies”键,npm i -D dep将依赖添加到package.json中的“devDependencies”。如何安装将其添加到 package.json 中的“peerDependencies”键的依赖项?我也搜索了这个,但是我用 npm i 安装它并手动将它移动到键 @Broncha 感谢您以更好的方式描述问题,我用您的描述更新了问题。 【参考方案1】:

就目前而言,没有办法,您可以将依赖项安装为对等依赖项。然后您必须安装并手动将它们移动到package.json 中的peerDependencies 对象

- 我注意到您更新了问题,而我的回答不符合更新后问题的上下文。

旧答案


在 npm v3 中删除了对等依赖项的自动安装,此功能在 npm v7 中已过时添加。

因此,将您的 npm 更新到版本 7 或更高版本将解决大部分问题。

如果您需要将依赖项安装为对等依赖项。

要安装peer依赖,其实需要手动修改package.json文件。

例如,如果要安装 Angular 的核心组件库作为对等依赖项,

    npm i @angular/core

这将在依赖对象中添加一个属性。

"dependencies": 
    "@angular/core": "^7.0.0"

    将安装的包名移动到peerDependencies键。
"peerDependencies": 
    "@angular/core": "^7.0.0"

额外: 如果您需要同一个包的两个版本,那么您可以像这样修改packge.json 文件,

"peerDependencies": 
   "@angular/core": "^6.0.0"
   "@angular/core": "^7.0.0"
 

【讨论】:

所以这曾经存在于npm,现在它不再存在了?为什么?【参考方案2】:

您不能直接在 npm 3 中执行此操作,因此请查看以下参考以获取详细信息 https://***.com/a/35207983/10309265 您可以通过任一方式参考:https://***.com/a/35690137/10309265

【讨论】:

【参考方案3】:

所有其他答案都在谈论 NPM 命令如何处理在当前项目的 package.json 中安装当前“deps”和“devDeps”的“peerDeps”,并自动安装它们。

但问题是如何使用带有特定标志的 NPM 命令将 deps 安装为“peerDeps”并写入当前项目的 package.json。

ANSWER 不幸的是,即使在 NPM@7 之前也没有这样的标志

我猜 NPM 不认为是安装 deps 的命令,因为将“peerDeps”添加到 package.json 并不需要 NPM 将包安装到 /node_modules/。这只是对 package.json 的文件配置更改。但我知道人们不想在 package.json 文件中手动添加/删除“deps”,并希望 NPM 这样做,这可能是因为 NPM 将处理“deps”的顺序。 另一个原因是,“peerDeps”总是使用一系列 semver,并且必须手动编辑,而不是通过 npm install 命令。喜欢react-redux:

"peerDependencies": 
  "react": "^16.8.3 || ^17"
,

我认为 NPM@7 应该提供一种方法来支持这一点,因为现在它已经正式能够处理“peerDeps”并且这个功能是其中的一部分。

【讨论】:

以上是关于如何将 npm 依赖项添加为对等依赖项的主要内容,如果未能解决你的问题,请参考以下文章

为啥在 npm 中为插件使用对等依赖项?

如何修复对等依赖项安装问题

安装拉力编码依赖项时未安装 NPM 警告所需的对等依赖项

在 npm 包中使用对等依赖项

为啥 NPM 7.17 不安装我的对等依赖项

发布 TypeScript 包时如何处理可选的对等依赖项?