【问题标题】:How to install npm peer dependencies automatically?如何自动安装 npm 对等依赖项?
【发布时间】:2016-05-14 10:34:06
【问题描述】:

例如,当我安装 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 - 是的,安装它想要的确切版本作为对等依赖项可以消除警告。您不想全局安装它们(使用 -g 标志)。您想在本地安装它们(-S 标志),但正如我所说,它们需要是确切的版本(即:angular2@2.0.0-beta.3 需要 es6-promise@^3.0.2)。但是,我想知道是否有自动安装对等依赖项的命令/标志。
  • @DouglasLudlow 你用的是什么版本的 NPM?
  • @peteb: npm -v => 3.5.3
  • 为错过同行的包裹运行npm install [PACKAGE] 对我有用。显然,这不会解决 OP 的问题,但我花了很多时间研究这个问题,所以如果这对某人有帮助......

标签: node.js npm


【解决方案1】:

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

第一步:$ npm i npm-install-peers -D

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

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

  ....
   "scripts": {
    ...
    "postinstall": "npm-install-peers"
  },
  ....

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

$ npm install

【讨论】:

    【解决方案2】:

    安装yarn然后运行:

    yarn global add install-peerdeps
    

    【讨论】:

    • 安装 npm 包不需要安装 yarn。此外,install-peerdeps 包在没有对等依赖项时会报错。
    【解决方案3】:

    对等依赖项的自动安装已在 npm 3 中显式删除,因为它导致的问题比它试图解决的要多。例如,您可以在此处阅读:

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

    NPM V7

    NPM v7 重新引入了自动 peerDependencies 安装。 他们进行了一些更改以解决旧问题,因为多个依赖项之间的版本兼容性。 可以看讨论here和公告here

    现在在 V7 中,与 V3 之前的版本一样,您只需要做一个 npm i 并且所有 peerDependences 应该会自动安装。

    【讨论】:

    • 是的,我看到了这个:github.com/npm/npm/issues/6565... 我只是希望您仍然可以选择使用标志或其他东西安装它们。我想我得打开一个问题之类的。
    • 你如何处理这类问题?我不是 npm 专家,所以当我读到“x 需要 y 的同级但没有找到”时,我问自己,“哪个同级?”和“我怎样才能让一切恢复正常?”有流程吗?您是否深入研究 x 和 y 的代码,直到发现缺少什么?一旦你发现缺少了什么,你接下来要做什么?谢谢!
    • 啊,这是一个英文问题:“x requires a peer of y but none was installed”应该是“x requires the peer, y, but y was not installed”。我将其理解为“x 需要 y 的一个对等体,但该对等体没有安装,我们没有告诉你需要 y 的哪个对等体”。
    • 存在“无关”,因为您需要将它们添加到您的包依赖项中。
    • 我想我会在这里补充一点,你应该认为这是 angular2 中的一个错误,真正的解决方案是该包的作者停止将明显依赖关系的东西列为对等依赖关系。
    【解决方案4】:

    作弊码在这个场景和其他一些场景中很有帮助......

    ├── UNMET PEER DEPENDENCY @angular/common@4.0.2
    ├── UNMET PEER DEPENDENCY @angular/compiler@4.0.2
    ├── UNMET PEER DEPENDENCY @angular/compiler-cli@4.0.2
    ├── UNMET PEER DEPENDENCY @angular/core@4.0.2
    ├── UNMET PEER DEPENDENCY @angular/forms@4.0.2
    ├── UNMET PEER DEPENDENCY @angular/http@4.0.2
    ├── UNMET PEER DEPENDENCY @angular/platform-browser@4.0.2
    ├── UNMET PEER DEPENDENCY @angular/platform-browser-dynamic@4.0.2 >
    
    1. 复制并粘贴您的错误到您的代码编辑器中。
    2. 用光标突出显示不需要的部分。在这种情况下├── UNMET PEER DEPENDENCY
    3. command + d多次。
    4. 两次删除。 (如果您不小心突出显示了├── UNMET PEER 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-browser@4.0.2 @angular/platform-browser-dynamic@4.0.2 --save
    

    【讨论】:

    • 从 npm 5.0.0 开始,显然不再需要选项 --savestackoverflow.com/a/19578808/12484
    • 这是没有帮助的,因为它依赖于你不清楚你实际在做什么的快捷方式。快捷方式因平台和编辑器而异。
    【解决方案5】:

    我通过使用警告的确切值重写 package.json 解决了这个问题。

    运行npm时的警告:

    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
    

    package.json,写

    "es6-shim": "^0.33.3",
    "reflect-metadata": "0.1.2",
    

    然后,删除node_modules目录。

    最后,运行以下命令:

    npm install
    

    【讨论】:

    • 也许npm cache cleannpm install 可能比擦除 node_modules 更好?我总是避免删除 node_modules,我喜欢找出问题所在,而不是删除目录。
    • 我不认为这对人们来说是一个非常安全的想法,只是让它发挥作用。他们有加剧冲突的更大变化:代码与其库不匹配。
    • 尝试运行 npm clean cache 时收到以下错误消息:npm ERR!从 npm@5 开始,npm 缓存从损坏问题中自我修复,并且从缓存中提取的数据保证有效。如果您想确保一切一致,请改用“npm cache verify”。另一方面,如果您正在调试安装程序的问题,您可以使用npm install --cache /tmp/empty-cache 来使用临时缓存而不是核对实际缓存。 npm 错误! npm 错误!如果您确定要删除整个缓存,请使用 --force 重新运行此命令。
    • package.json的哪个部分?在哪个package.json?包中的那个还是应用程序中的那个?
    【解决方案6】:

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

    【讨论】:

      【解决方案7】:

      执行这个:npm install-test

      【讨论】:

      • 你是最棒的!
      【解决方案8】:

      项目npm-install-peers 将检测对等点并安装它们。

      截至v1.0.1,它不支持自动回写package.json,这基本上可以解决我们的需求。

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

      【讨论】:

      • 在运行时,它给了我这个信息。 This package doesn't seem to have any peerDependencies
      • 据我了解,npm-install-peers 将安装在package.json 注册的peerDependencies。它不会安装peerDependencies 的依赖项,例如angular2
      • 是的,第二条@drizzd 评论:npm-install-peers 仅用于安装项目的 package.json 中列出的"peerDependencies"。您正在尝试安装每个node_modules/<package>/package.json 文件中列出的"peerDependencies",而不是您的直接对等依赖项。
      猜你喜欢
      • 2022-06-10
      • 1970-01-01
      • 2018-04-22
      • 2016-03-14
      • 2020-05-12
      • 2020-06-20
      • 1970-01-01
      • 2018-02-13
      相关资源
      最近更新 更多