Как установить автоматические зависимости 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. Даже после ручной установки es6-обещания с флагом -g и повторной попытки установки npm -g angular2 я получаю ту же ошибку / предупреждение о 5 неудовлетворенных зависимостях одноранговых узлов es6-обещание, es6-shim, отражение-метаданные, rxjs и zone.js
nttakr
4
@nttakr - да, установка точных версий, которые он хочет, поскольку зависимости от пира избавляет от предупреждения. Вы не хотите устанавливать их глобально (с флагом -g). Вы хотите установить их локально (флаг -S), но, как я уже сказал, они должны быть точными версиями (то есть: angular2@2.0.0-beta.3требуется es6-promise@^3.0.2). Тем не менее, я хочу знать, есть ли команда / флаг, который автоматически устанавливает зависимости между равноправными узлами.
Дуглас Ладлоу
@DouglasLudlow, какую версию NPM вы используете?
peteb
@peteb: npm -v=>3.5.3
Дуглас Ладлоу
У меня та же проблема, и я не нашел решения проблемы ...
youngwind

Ответы:

178

Автоматическая установка одноранговых зависимостей была явно удалена с помощью npm 3, так как это вызывает больше проблем, чем пыталось решить. Вы можете прочитать об этом здесь, например:

Так что нет, по указанным причинам вы не можете установить их автоматически с npm 3 и выше.

migg
источник
4
Да, я видел это: github.com/npm/npm/issues/6565 ... Я просто надеялся, что вы все еще можете установить их с флагом или чем-то еще. Думаю, мне придется открыть вопрос или что-то.
Дуглас Ладлоу
158
Как вы справляетесь с такой проблемой? Я не эксперт по npm, поэтому, когда я читаю «x требует однорангового узла y, но ни один не был найден», я спрашиваю себя «какой одноранговый узел?» и "как я могу заставить все работать снова?" Есть ли процесс? Ты копаешься в коде х и у, пока не узнаешь, чего не хватает? Как только вы узнаете, чего не хватает, что вы будете делать дальше? Спасибо!
Дэн Канкро
82
Ах, это английская проблема: «x требует однорангового узла y, но ни один не был установлен» должно быть «x требует однорангового узла y, но y не был установлен». Я понял это как «x требует одного из узлов y, но этот узел не был установлен, и мы не сообщаем вам, какой из узлов y вам нужен».
Дэн Канкро
1
Также, если я вручную устанавливаю перечисленные зависимости между равноправными узлами, я получаю их как extraneousпакеты
plsnoban
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: "отражать-метаданные": "0.1.2",

Delete node_modules directory

npm install
MrLehiste
источник
15
Возможно npm cache clean, npm installможет быть лучше, чем стирание node_modules? Я всегда воздерживаюсь от удаления node_modules, мне нравится выяснять, в чем проблема, а не уничтожать каталог.
Бруно
Я не думаю, что это очень безопасная идея для людей - просто заставить ее работать. У них есть более высокие изменения ухудшения их конфликтов: наличие кода, который не соответствует его библиотеке.
zoomlar
Получил следующее сообщение об ошибке при попытке запустить npm clean cache: npm ERR! Начиная с npm @ 5, кэш npm самовосстанавливается от проблем с повреждением, а данные, извлеченные из кеша, гарантированно действительны. Если вы хотите убедиться, что все согласовано, используйте вместо этого 'npm cache verify'. С другой стороны, если вы отлаживаете проблему с помощью установщика, вы можете npm install --cache /tmp/empty-cacheиспользовать временный кэш вместо обнуления реального. нпм ERR! нпм ERR! Если вы уверены, что хотите удалить весь кэш, повторите команду с параметром --force.
Тарун
22

Чит-код полезен в этом сценарии и некоторых других ...

M── UNMET PEER ЗАВИСИМОСТЬ @ angular / common @ 4.0.2

M── UNMET PEER ЗАВИСИМОСТЬ @ angular / compiler @ 4.0.2

M── UNMET PEER ЗАВИСИМОСТЬ @ angular / compiler-cli @ 4.0.2

M── UNMET PEER ЗАВИСИМОСТЬ @ angular / core @ 4.0.2

M── UNMET PEER ЗАВИСИМОСТЬ @ angular / forms @ 4.0.2

M── UNMET PEER ЗАВИСИМОСТЬ @ angular / http @ 4.0.2

M── UNMET PEER ЗАВИСИМОСТЬ @ angular / platform-browser @ 4.0.2

UN── UNMET PEER ЗАВИСИМОСТЬ @ angular / platform-browser-dynamic @ 4.0.2>

  1. скопируйте и вставьте ошибку в редактор кода.
  2. Выделите ненужную часть с вашей curser. В этом случае «НЕЗАВИСИМАЯ НЕЗАВИСИМОСТЬ»
  3. Нажмите команду + d несколько раз.
  4. Нажмите удалить дважды . (Нажмите пробел, если вы случайно выделили 'M── НЕЗАВИСИМАЯ ОТ ЗНАЧЕНИЯ ОТВЕТСТВЕННОСТИ'.)
  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 - сохранить

zoomlar
источник
8
Эта опция --save, очевидно, больше не требуется с npm 5.0.0: stackoverflow.com/a/19578808/12484
Джон Шнайдер,
12

Проект npm-install-peersобнаружит пиров и установит их.

По состоянию на v1.0.1это не поддерживает обратную запись в package.jsonавтоматическом режиме, что по существу решило бы нашу потребность здесь.

Пожалуйста, добавьте вашу поддержку для выпуска в полете: https://github.com/spatie/npm-install-peers/issues/4

deepelement
источник
36
При запуске он дал мне это сообщение. This package doesn't seem to have any peerDependencies
Табун
2
У меня такое же сообщение.
Тибо Бурсье
7
Как я понял, npm-install-peersустановят peerDependenciesзарегистрированного в package.json. Он не будет устанавливать peerDependenciesзависимости, такие как angular2.
drizzd
Да, на второй комментарий @drizzd: npm-install-peersпредназначен только для установки "peerDependencies"перечисленных в package.json вашего проекта. Вы пытаетесь установить "peerDependencies"перечисленные в каждом из вас node_modules/<package>/package.jsonфайлы, а не ваши прямые зависимости.
Уилл Фарли
5

Я столкнулся с этими ошибками, когда разрабатывал пакет npm peerDependencies. Я должен был убедиться, что любой из peerDependenciesних также был указан как devDependencies. Проект не будет автоматически использовать глобально установленные пакеты.

joshweir
источник
Это изящное решение, так как простое добавление к «зависимостям» несколько неуклюже!
Ашот
0

Установите пряжу и запустите

глобальная пряжа добавить install-peerdeps

Carlos
источник
-5

Выполните это: npm install-test

Иван Феррер
источник