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

Amr*_*ama 6 javascript node.js npm yarnpkg

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

"peerDependencies": {
  "@angular/core": "^7.0.0"
}
Run Code Online (Sandbox Code Playgroud)

感谢@Broncha,更新问题的更多说明

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

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

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

Way*_*Mao 8

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

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

不幸的是,答案是,即使在 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"
},
Run Code Online (Sandbox Code Playgroud)

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


Roh*_*had 6

至于现在,没有办法,您可以将依赖项安装为对等依赖项。您必须安装然后移动它们以peerDependencies键入package.json

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

旧答案


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

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

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

要安装对等依赖,您实际上需要手动修改您的package.json文件。

比如你想安装angular的核心组件库作为peer依赖,

  1. npm i @angular/core

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

"dependencies": {
    "@angular/core": "^7.0.0"
}
Run Code Online (Sandbox Code Playgroud)
  1. 将已安装的包名称移动到peerDependencieskey。
"peerDependencies": {
    "@angular/core": "^7.0.0"
}
Run Code Online (Sandbox Code Playgroud)

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

"peerDependencies": {
   "@angular/core": "^6.0.0"
   "@angular/core": "^7.0.0"
 }
Run Code Online (Sandbox Code Playgroud)

  • 那么这曾经存在于“npm”中,但现在不再存在了?为什么? (3认同)
  • 确定“同一包的两个版本”吗?它是一个 JSON,两次相同的密钥意味着 a) 第一个被覆盖,最后一个获胜.. 和 b) eslint 警告。如果可能的话,他们违反了 JSON 格式吗?^^ @HashimAziz 如果真的可能的话我想我的评论就是答案 (2认同)

xyr*_*res 5

安装命令的选项--save-peer就是您正在寻找的:

npm install --save-peer <dep>
Run Code Online (Sandbox Code Playgroud)

如果<dep>已经安装在 下dependencies,那么此命令会自动将其移动到下peerDependencies

这比手动编辑 package.json 更好,因为它也会更新锁定文件。