ChatGPT解决这个技术问题 Extra ChatGPT

如何自动安装 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.

是否有一个魔术标志可以传递给 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 的问题,但我花了很多时间研究这个问题,所以如果这对某人有帮助......

B
Bruno João

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

https://blog.npmjs.org/post/110924823920/npm-weekly-5

https://github.com/npm/npm/releases/tag/v3.0.0

所以不,由于给出的原因,您不能使用 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 中的一个错误,真正的解决方案是该包的作者停止将明显依赖关系的东西列为对等依赖关系。
v
viruskinghjx

我通过使用警告的确切值重写 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?包中的那个还是应用程序中的那个?
w
wowkin2

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

├── 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 >

将您的错误复制并粘贴到您的代码编辑器中。用光标突出显示不需要的部分。在这种情况下 ├── UNMET PEER DEPENDENCY 按命令 + da 一堆时间。按两次删除。 (如果您不小心突出显示了,请按空格 ├── UNMET PEER DEPENDENCY )按一次。添加 npm install 按下一次。添加 --save 将你的东西复制回 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
这是没有帮助的,因为它依赖于你不清楚你实际在做什么的捷径。快捷方式因平台和编辑器而异。
有道理。他似乎正在做的是获取日志输出并将投诉放在行的前面,以便他可以将其余部分解析为单个“npm install”命令。
j
joshweir

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


b
bb216b3acfd8f72cbc8f899d4d6963

项目 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",而不是您的直接对等依赖项。
V
Vinesh Goyal

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

第 1 步:$ 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


R
Roy kathurima

可能有点过时,但您可以运行 npx install-peerdeps --yarn --dev PACKAGE_NAME。如果您想使用 yarn,请传递 --yarn 标志;如果您希望将包及其对等部门添加为开发依赖项,请传递 --dev 标志。希望这可以帮助


F
Farhan

安装纱线,然后运行:

yarn global add install-peerdeps

无需安装 yarn 即可安装 npm 包。此外,当没有对等依赖项时,install-peerdeps 包会出错。
I
Ivan Ferrer

执行:npm install-test


你是最好的!