如何自动安装npm peer dependencies?

Dou*_*low 246 node.js npm

例如,当我安装Angular2时:

npm install --save angular2
temp@1.0.0 /Users/doug/Projects/dougludlow/temp
??? angular2@2.0.0-beta.3 
??? UNMET PEER DEPENDENCY es6-promise@^3.0.2
??? UNMET PEER DEPENDENCY es6-shim@^0.33.3
??? UNMET PEER DEPENDENCY reflect-metadata@0.1.2
??? UNMET PEER DEPENDENCY rxjs@5.0.0-beta.0
??? UNMET PEER DEPENDENCY zone.js@0.5.11

npm WARN angular2@2.0.0-beta.3 requires a peer of es6-promise@^3.0.2 but none was installed.
npm WARN angular2@2.0.0-beta.3 requires a peer of es6-shim@^0.33.3 but none was installed.
npm WARN angular2@2.0.0-beta.3 requires a peer of reflect-metadata@0.1.2 but none was installed.
npm WARN angular2@2.0.0-beta.3 requires a peer of rxjs@5.0.0-beta.0 but none was installed.
npm WARN angular2@2.0.0-beta.3 requires a peer of zone.js@0.5.11 but none was installed.
Run Code Online (Sandbox Code Playgroud)

是否有一个魔法标志,我可以传递给npm,也将安装对等依赖项?我找不到一个...手动复制和粘贴对等依赖项并确保我有正确的版本是很繁琐的.

换句话说,我宁愿不必这样做:

npm install --save angular2@2.0.0-beta.3 es6-promise@^3.0.2 es6-shim@^0.33.3 reflect-metadata@0.1.2 rxjs@5.0.0-beta.0 zone.js@0.5.11
Run Code Online (Sandbox Code Playgroud)

有什么更好的方法?

mig*_*igg 159

使用npm 3显式删除了对等依赖项的自动安装,因为它会导致比尝试解决的问题更多的问题.你可以在这里阅读它,例如:

所以不,由于给出的原因,您无法使用npm 3向上自动安装它们.

  • 你是如何处理这类问题的?我不是一个npm专家所以当我读到"x需要一个y的同行但没有找到"时,我会问自己,"哪个同伴?" 和"我怎么能让一切都恢复正常?" 有进程吗?你是否深入研究x和y的代码,直到你发现缺少什么?一旦你发现缺少什么,接下来你会做什么?谢谢! (125认同)
  • 啊,这是一个英语问题:"x需要y的同行,但没有安装"应该是"x需要同行,y,但是没有安装y".我理解为"x需要y的同行之一,但是没有安装同伴,我们不会告诉你你需要哪个同行". (70认同)
  • 是的,我看到了这个:https://github.com/npm/npm/issues/6565 ...我只是希望你仍然可以选择用旗帜或其他东西安装它们.我猜我必须打开一个问题. (3认同)
  • 有"无关"因为您需要将它们添加到包依赖项中. (3认同)
  • 我想我会在这里补充一点,你应该认为这是 angular2 中的一个错误,真正的解决方案是让该包的作者停止将明显依赖的东西列为对等依赖。 (3认同)

MrL*_*ste 34

我通过重写package.json解决了它的确切值警告是关于:

npm WARN angular2@2.0.0-beta.3 requires a peer of es6-shim@^0.33.3 but none was installed.
Run Code Online (Sandbox Code Playgroud)

package.json:"es6-shim":"^ 0.33.3",

npm WARN angular2@2.0.0-beta.3 requires a peer of reflect-metadata@0.1.2
Run Code Online (Sandbox Code Playgroud)

package.json:"reflect-metadata":"0.1.2",

Delete node_modules directory

npm install
Run Code Online (Sandbox Code Playgroud)

  • 也许`npm cache clean`,`npm install`可能比擦除node_modules更好?我总是避免删除node_modules,我想知道问题是什么,而不是吹走目录. (14认同)
  • 我不认为这对人们来说只是让它发挥作用是一个非常安全的想法。他们有更大的变化来恶化他们的冲突:拥有与其库不匹配的代码。 (2认同)

zoo*_*lar 19

作弊代码在这种情况下有用,还有一些......

├──UNMETPEER DEPENDENCY @ angular/common @ 4.0.2

├──UNMETPEER DEPENDENCY @ angular/compiler @ 4.0.2

├──UNMETPEER DEPENDENCY @ angular/compiler-cli @ 4.0.2

├──UNMETPEER DEPENDENCY @ angular/core @ 4.0.2

├──UNMETPEER DEPENDENCY @ angular/forms @ 4.0.2

├──UNMETPEER DEPENDENCY @ angular/http @ 4.0.2

├──UNMETPEER DEPENDENCY @ angular/platform-b​​rowser @ 4.0.2

├──UNMETPEER DEPENDENCY @ angular/platform-b​​rowser-dynamic @ 4.0.2>

  1. 错误复制并粘贴到代码编辑器中.
  2. 使用光标突出显示不需要的部分.在这种情况下'├──UNMETPEER DEPENDENCY'
  3. 多次按命令+ d.
  4. 删除两次.(如果您不小心突出显示'├──UNMETPEER DEPENDENCY',请按空格键.)
  5. 按一下.添加'npm install'
  6. 按下一次.添加'--save
  7. 将您的东西复制回cli并运行

npm install @ angular/common @ 4.0.2 @ angular/compiler @ 4.0.2 @ angular/compiler-cli @ 4.0.2 @ angular/core @ 4.0.2 @ angular/forms @ 4.0.2 @ angular/http @ 4.0 .2 @ angular/platform-b​​rowser @ 4.0.2 @ angular/platform-b​​rowser-dynamic @ 4.0.2 --save

  • 从npm 5.0.0开始,显然不再需要`--save`选项:/sf/answers/1370516591/ (6认同)
  • 这是没有帮助的,因为它依赖于快捷方式,而不清楚您实际在做什么。快捷方式因平台和编辑器而异。 (5认同)

dee*_*ent 11

该项目npm-install-peers将检测同行并安装它们.

因为v1.0.1它不支持package.json自动写回,这基本上解决了我们的需求.

请在飞行中添加您的支持:https://github.com/spatie/npm-install-peers/issues/4

  • 在跑步时,它给了我这个消息.`这个包似乎没有任何peerDependencies` (33认同)
  • 据我了解,`npm-install-peers`将安装在`package.json`中注册的`peerDependencies`.它不会安装`peerDependencies`等依赖项,例如`angular2`. (5认同)
  • 我有同样的信息. (2认同)

jos*_*eir 11

我在开发具有peerDependencies. 我必须确保 anypeerDependencies也被列为devDependencies. 该项目不会自动使用全局安装的包。


小智 6

我遇到了同样的问题,幸运的是我找到了另一种方法来安装对等依赖项以及安装命令。

步骤1:$ npm i npm-install-peers -D

为了更清楚地了解该插件:https ://www.npmjs.com/package/npm-install-peers

第2步:更新package.json魔法脚本

  ....
   "scripts": {
    ...
    "postinstall": "npm-install-peers"
  },
  ....
Run Code Online (Sandbox Code Playgroud)

第 3 步:只需点击安装命令即可安装所有插件

$ npm install