如何自动安装npm对等依赖项?


274

例如,当我安装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.

是否可以传递给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

有什么更好的方法?


您已经解决了这个问题吗?我在安装angular2时遇到了同样的问题。即使在使用-g标志手动安装es6-promise并重试npm install -g angular2之后,我仍然得到5个未满足的对等依赖项es6-promise,es6-shim,reflect-metadata,rxjs和zone.js的相同错误/警告。
nttakr

4
@nttakr-是的,安装对等依赖项所需的确切版本可以摆脱警告。您不想全局安装它们(使用-g标志)。您想在本地安装它们(-S标志),但是正如我所说,它们必须是确切的版本(即:angular2@2.0.0-beta.3require es6-promise@^3.0.2)。但是,我想知道是否有一个命令/标志会自动安装对等项依赖关系。
Douglas Ludlow

@DouglasLudlow您正在使用什么版本的NPM?
peteb '16

@peteb:npm -v=>3.5.3
道格拉斯·拉德洛

我有同样的问题,但我没有找到解决方案的结果
。...– youngwind

Answers:


178

npm 3明确删除了对等依赖项的自动安装,因为它引起的问题比它尝试解决的更多。例如,您可以在此处阅读有关内容:

因此,由于给出的原因,您不能使用npm 3或更高版本自动安装它们。


4
是的,我看到了:github.com/npm/npm/issues/6565 ...我只是希望您仍然可以选择使用标志或其他东西安装它们。猜猜我将要打开一个问题。
Douglas Ludlow

155
您如何处理此类问题?我不是npm专家,所以当我读到“ x要求y的对等体,但没有找到”时,我问自己“哪个对等体?” 和“我如何才能使所有功能再次运行?” 有流程吗?在找出缺失的内容之前,您是否会深入研究x和y的代码?一旦找到缺失的内容,下一步该怎么做?谢谢!
Dan Cancro

81
嗯,这是一个英语问题:“ x需要y的对等体,但没有安装”应该是“ x需要y的对等体,但是没有安装y”。我将其理解为“ x需要y的一个对等体,但尚未安装该对等体,因此我们不会告诉您您需要y的哪个对等体”。
Dan Cancro

1
另外,如果我手动安装列出的对等依赖项,则将它们作为extraneous软件包获得
plsnoban '16

3
存在“外部”,因为您需要将它们添加到您的程序包依赖项中。
Dinoboff

37

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

npm WARN angular2@2.0.0-beta.3 requires a peer of es6-shim@^0.33.3 but none was installed.

package.json:“ es6-shim”:“ ^ 0.33.3”,

npm WARN angular2@2.0.0-beta.3 requires a peer of reflect-metadata@0.1.2

package.json:“ reflect-metadata”:“ 0.1.2”,

Delete node_modules directory

npm install

15
也许一个npm cache cleannpm install可能比擦除node_modules更好?我总是避免删除node_modules,我想找出问题所在,而不是浪费目录。
布鲁诺

对于人们来说,让它正常工作并不是一个非常安全的主意。他们有更大的变化,加剧了他们的冲突:拥有与其库不匹配的代码。
zoomlar

尝试运行npm clean缓存时收到以下错误消息:npm ERR!从npm @ 5开始,npm缓存会因损坏问题而自我修复,并且保证从缓存中提取的数据是有效的。如果要确保所有内容都一致,请改用“ npm cache verify”。另一方面,如果您要调试安装程序中的问题,则可以使用npm install --cache /tmp/empty-cache临时缓存来代替实际的缓存。npm ERR!npm ERR!如果确定要删除整个缓存,请使用--force重新运行此命令。
塔伦

22

作弊代码在这种情况下和其他情况下很有帮助...

├──对等的依赖@ 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>

  1. 错误复制并粘贴到代码编辑器中。
  2. 用光标突出显示不需要的部分。在这种情况下,“├──未达到对等关系”
  3. 多次按Command + d
  4. 两次Delete键。(如果不小心突出显示了“├──对等的依赖关系”,请按空格。)
  5. 按下一次。添加“ npm install”
  6. 按下一次。添加'-保存
  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-保存


8
--savenpm 5.0.0开始,显然不再需要该选项:stackoverflow.com/a/19578808/12484
Jon Schneider

12

该项目npm-install-peers将检测并安装对等体。

截至目前,v1.0.1它不支持package.json自动回写,这从本质上解决了我们的需求。

请添加您的支持以发布问题:https : //github.com/spatie/npm-install-peers/issues/4


36
在跑步时,它给了我这个信息。This package doesn't seem to have any peerDependencies
Thabung

2
我有同样的讯息。
Thibault Boursier

7
据我了解,npm-install-peers它将安装peerDependencies在中注册package.json。它不会安装peerDependencies诸如的依赖项angular2
drizzd

是的,第二个@drizzd注释:npm-install-peers仅用于安装"peerDependencies"项目的package.json中列出的内容。您正在尝试安装"peerDependencies"每个node_modules/<package>/package.json文件中列出的文件,而不是直接对等项依赖文件。
Will Farley

5

我在开发具有的npm软件包时遇到了这些错误peerDependencies。我必须确保任何一个peerDependencies也都列为devDependencies。该项目不会自动使用全局安装的软件包。


这是一个很好的解决方案,因为简单地添加到“依赖项”有点笨拙!
阿绍特


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.