ChatGPT解决这个技术问题 Extra ChatGPT

How to install npm peer dependencies automatically?

For example, when I install 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.

Is there a magic flag that I can pass to npm that will install the peer dependencies as well? I haven't been able to find one... It's tedious to manually copy and paste the peer dependencies and make sure I have the correct versions.

In other words, I'd rather not have to do:

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

What is the better way?

Have you already solved that problem? I have the same issue installing angular2. Even after manually install es6-promise with -g flag and re-trying npm install -g angular2 I do get the same Error/Warning of 5 unmet peer dependencies es6-promise, es6-shim, reflect-metadata, rxjs and zone.js
@nttakr - yes, installing the exact versions that it wants as peer dependencies gets rid of the warning. You don't want to install them globally (with the -g flag). You want to install them locally (-S flag), but as I said, they need to be the exact versions (ie: angular2@2.0.0-beta.3 requires es6-promise@^3.0.2). However, I want to know if there is a command/flag which automatically installs the peer dependencies.
@DouglasLudlow what version of NPM are you using?
@peteb: npm -v => 3.5.3
Running npm install [PACKAGE] for the package that misses a peer did the trick for me. Obviously, that won't solve the OP's issue, but I spent quite a bit of time researching that, so if this helps somebody...

B
Bruno João

The automatic install of peer dependencies was explicitly removed with npm 3, as it cause more problems than it tried to solve. You can read about it here for example:

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

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

So no, for the reasons given, you cannot install them automatically with npm 3 upwards.

NPM V7

NPM v7 has reintroduced the automatic peerDependencies installation. They had made some changes to fix old problems as version compatibility across multiple dependants. You can see the discussion here and the announcement here

Now in V7, as in versions before V3, you only need to do an npm i and all peerDependences should be automatically installed.


Yeah, I saw this: github.com/npm/npm/issues/6565... I was just hoping that you could still optionally install them with a flag or something. Guess I'll have to open an issue or something.
How do you deal with this sort of problem? I'm not an npm expert so when I read "x requires a peer of y but none was found", I ask myself, "which peer?" and "how can i just make everything work again?" Is there a process? Do you dig into the code of x and y until you find out what's missing? Once you find out what's missing, what do you do next? Thanks!
Ah, it's an English problem: "x requires a peer of y but none was installed" should be "x requires the peer, y, but y was not installed". I understood it as "x requires one of y's peers but that peer was not installed and we're not telling you which of y's peers you need".
There are "extraneous" because you need to add them to you package dependencies.
I thought I would add here that you should consider this a bug in angular2, and the real solution is for the authors of that package to stop listing things that are clearly dependencies as peer dependencies.
v
viruskinghjx

I solved it by rewriting package.json with the exact values warnings were about.

Warnings when running 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

In package.json, write

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

Then, delete node_modules directory.

Finally, run the command below:

npm install

Perhaps an npm cache clean, npm install may be better than wiping node_modules? I always refrain from deleting node_modules, I like to find out what the issue is rather than blowing away the directory.
I don't think this is a very safe idea for people to just get it to work. They have higher changes of worsening their conflicts: having code that doesn't match it's library.
Got the following error messag while trying to run npm clean cache: npm ERR! As of npm@5, the npm cache self-heals from corruption issues and data extracted from the cache is guaranteed to be valid. If you want to make sure everything is consistent, use 'npm cache verify' instead. On the other hand, if you're debugging an issue with the installer, you can use npm install --cache /tmp/empty-cache to use a temporary cache instead of nuking the actual one. npm ERR! npm ERR! If you're sure you want to delete the entire cache, rerun this command with --force.
In which section of package.json? In which package.json? The one from the package or the one from the app?
w
wowkin2

Cheat code helpful in this scenario and some others...

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

copy & paste your error into your code editor. Highlight an unwanted part with your curser. In this case ├── UNMET PEER DEPENDENCY Press command + d a bunch of times. Press delete twice. (Press space if you accidentally highlighted ├── UNMET PEER DEPENDENCY ) Press up once. Add npm install Press down once. Add --save Copy your stuff back into the cli and run

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

The option --save is evidently no longer required as of npm 5.0.0: stackoverflow.com/a/19578808/12484
This is unhelpful, as it relies on shortcuts where it's not clear what you're actually doing. Shortcuts are different by platform and editor.
Fair point. What he seems to be doing is taking the log output and zapping the complaints at the front of the lines so he can parse the rest into a single "npm install" command.
j
joshweir

I experienced these errors when I was developing an npm package that had peerDependencies. I had to ensure that any peerDependencies were also listed as devDependencies. The project would not automatically use the globally installed packages.


b
bb216b3acfd8f72cbc8f899d4d6963

The project npm-install-peers will detect peers and install them.

As of v1.0.1 it doesn't support writing back to the package.json automatically, which would essentially solve our need here.

Please add your support to issue in flight: https://github.com/spatie/npm-install-peers/issues/4


On running, It gave me this message. This package doesn't seem to have any peerDependencies
As I understand it, npm-install-peers will install peerDependencies registered in package.json. It will not install peerDependencies of dependencies such as angular2.
Yes, to second @drizzd comment: npm-install-peers is only intended for installing the "peerDependencies" listed in your project's package.json. You are trying to install the "peerDependencies" listed in each one of you node_modules/<package>/package.json files, not your direct peer dependencies.
V
Vinesh Goyal

I was facing the same issue, lucky I found an alternative way to install peer dependencies along with the install command.

Step 1: $ npm i npm-install-peers -D

for more clarity about the plugin: https://www.npmjs.com/package/npm-install-peers

Step 2: Update package.json for magical script

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

Step 3: Just need to hit the install command to get installed all plugins

$ npm install


R
Roy kathurima

Might be a little outdated but you can run npx install-peerdeps --yarn --dev PACKAGE_NAME. Pass the --yarn flag if you wanna use yarn and --dev flag if you want the package and its peer deps to be added as dev dependencies. Hope this helps


F
Farhan

Install yarn and then run:

yarn global add install-peerdeps

It is not necessary to install yarn in order to install npm packages. Also, the install-peerdeps package gives an error when there are no peer dependencies.
I
Ivan Ferrer

Execute this: npm install-test


You're the best!