Как исправить предупреждение npm UNMET PEER DEPENDENCY?

223

Я на Windows 10, с Node 5.6.0 и npm 3.6.0. Я пытаюсь установить angular-material и mdi в мою рабочую папку.npm устанавливает ошибки mdi углового материала с:

+-- angular@1.5.0

+-- UNMET PEER DEPENDENCY angular-animate@^1.5.0

+-- UNMET PEER DEPENDENCY angular-aria@^1.5.0

+-- angular-material@1.0.6

+-- UNMET PEER DEPENDENCY angular-messages@^1.5.0 `-- mdi@1.4.57

npm WARN enoent ENOENT: no such file or directory, open
'C:\Users\xxxxx\Desktop\ngClassifieds\package.json' 

npm WARN angular-material@1.0.6 requires a peer of
angular-animate@^1.5.0 but none was installed. 

npm WARN angular-material@1.0.6 requires a peer of angular-aria@^1.5.0
but none was installed. 

npm WARN angular-material@1.0.6 requires a peer of
angular-messages@^1.5.0 but none was installed.

Как решить эту проблему, чтобы установить AngularJS Material и MDI?

Реза
источник
Эти ошибки создают какие-либо проблемы?
BlackHawk
Не для Резы, так что поздно, но для любых других ... Попробуйте это: npm view anger-material peerDependencies
peter70
1
В общем, вы не всегда хотите разрешить неудовлетворенную зависимость. Например, если у some-package есть зависимость от other-package@^1.5.0, а у вас установлен other-package@2.0.0, вам может не потребоваться откатить версию. Было бы лучше проверить, есть ли у вас проблемы с новой версией.
Джон Панкович

Ответы:

203

npm больше не устанавливает одноранговые зависимости, поэтому вам нужно установить их вручную, просто выполните npm installнеобходимые операции и попробуйте установить основную версию снова.


Ответить на комментарий:

это верно в том сообщении, в котором говорится, какие отделы вы пропустили

UNMET PEER DEPENDENCY angular-animate@^1.5.0 +-- 
UNMET PEER DEPENDENCY angular-aria@^1.5.0 +-- angular-material@1.0.6 +
UNMET PEER DEPENDENCY angular-messages@^1.5.0 `-- mdi@1.4.57` 

Так что вам нужно npm install angular angular-animate angular-aria angular-material angular-messages mdi

Datsik
источник
Есть ли способ найти углубления для угловых материалов, чтобы я мог установить?
Реза
2
Вам нужно добавить эти новые зависимости в ваш package.json?
0xcaff
2
@caffinatedmonkey, что было бы идеально
Datsik
9
@caffinatedmonkey, если вы укажете --saveпереключатель, npm обновит ваш package.json для вас (или --save-devесли пакет зависит от разработки)
McGuireV10
33
Разве весь смысл npm в том, чтобы он управлял всеми этими зависимостями для вас? если я установлю npm, то получу список невыполненных зависимостей, которые мне нужно вручную добавить в файл composer.json вручную, какое значение я получу от npm в этот момент?
chiliNUT
66

UNMET PEER DEPENDENCYвыдается ошибка, когда зависимости одного или нескольких модулей, указанных в package.jsonфайле, не встречаются. Внимательно проверьте предупреждения и обновите package.jsonфайл, указав правильные версии зависимостей.

Тогда беги

rm -rf node_modules/
npm cache clean
npm install

Это установит все необходимые зависимости правильно.

JayKrish
источник
3
Что такое зависимость от сверстников
aWebDeveloper
Когда вы устанавливаете пакет, он может зависеть от конкретных версий других пакетов. Если вы не предоставите правильную зависимую версию пакета, то «Peer зависимость» не будет выполнена. Поэтому вам нужно обновить ожидаемую версию зависимых пакетов, чтобы решить эту проблему.
JayKrish
4
Это не сработало для меня. Я все еще получил предупреждение о необходимости сверстника.
Адам Зернер
1
Гораздо чище, чем принятое решение! Этот набор кода обрабатывает все возможные случаи проблемы оператора, а не конкретную проблему, с которой они сталкиваются.
HoldOffHunger
использование команды npm cache clean дает сообщение об ошибке: Начиная с npm @ 5, кэш npm самовосстанавливается от проблем с повреждением, а данные, извлеченные из кеша, гарантированно действительны. Если вы хотите убедиться, что все согласовано, используйте вместо этого 'npm cache verify'. нпм ERR! Если вы уверены, что хотите удалить весь кеш, повторите команду с помощью --force.
CodeMonkey
30

В моем случае все зависимости уже были. Пожалуйста, обновите NPM в этом случае, так как он мог быть разбит. Это решило мою проблему.

npm install -g npm
Анудж Шарма
источник
Работал на меня. Я получаю сообщение об ошибке UNMET PEER DEPENDENCY typescriptпри попытке установить tslint. после обновления npm сначала нужно было установить typscript, а затем установить tslint.
Равималля,
По какой-то причине мне приходилось запускать его несколько раз, пока не обновились все его собственные зависимости.
Coderer
Это сломало npm для меня и привело к куче ошибок.
Джек
14

npm-install-peers работал для меня.

npm install -g npm-install-peers
alexoviedo999
источник
1
У меня не сработало: «У этого пакета, похоже, нет никаких взаимных зависимостей». Однако у меня есть несколько сообщений типа «npm ERR! Peer dep отсутствует: @ angular / common @ ^ 5.0.0 || ^ 6.0.0, требуется @ agm / core @ 1.0.0-beta.3»
Альмир Кампос,
2
Этот пакет только устанавливает прямые одноранговые узлы текущего пакета и умирает, не обрабатывая одноранговые узлы deps пакета (одноранговые дочерние элементы).
Алексей Скрипник
7

Одной из наиболее вероятных причин этой ошибки может быть то, что вы определили более старую версию в вашем package.json. Чтобы решить эту проблему, измените версии в package.json, чтобы они соответствовали тем, на которые жалуется npm.

После этого запустите npm install и вуаля !!

Томас Мвания
источник
6

Этот ответ не распространяется на все случаи, но если вы не можете решить эту проблему, просто набрав npm install , эти шаги могут помочь.

Допустим, вы получили эту ошибку.

UNMET PEER DEPENDENCY packageA@4.2.0

npm WARN packageB@3.3.0 requires a peer of packageA@^3.1.0 but none was installed.

Это означает, что вы установили версию 4.2.0 пакета A, но для packageB@3.3.0 требуется версия 3.xx пакета pakageA. ( объяснение ^ )

Таким образом, вы можете устранить эту ошибку, понизив пакет A до 3.xx, но обычно вы не хотите понижать пакет.
Хорошей новостью является то, что в некоторых случаях packageB просто не поспевает за packageA, и сопровождающий packageB изо всех сил старается поднять равноправную зависимость packageA до 4.xx.
В этом случае вы можете проверить, существует ли более высокая версия packageB, которая требуется версия 4.2.0 пакета A в npm или github.

Например, Перейти на страницу релизавведите описание изображения здесь

Часто вы можете найти серьезные изменения в зависимости, как это.

packageB v4.0.0-beta.0

BREAKING CHANGE
package: requires packageA >= v4.0.0

Если вы не нашли ничего на странице релиза, перейдите на страницу проблемы и выполните поиск по ключевому слову, например peer. Вы можете найти полезную информацию.

введите описание изображения здесь

На данный момент у вас есть два варианта.

1) Обновление до нужной версии.
2) Оставьте пока ошибку, дождитесь выпуска стабильной версии.

Если вы выберете вариант 1:
во многих случаях версия не имеет latest тега, поэтому не является стабильной. Поэтому вы должны проверить, что изменилось в этом обновлении, и убедиться, что ничего не сломается.

Если вы выберете вариант 2:
Если обновление pakageA с версии 3 до 4 является тривиальным, или если сопровождающий pakageB еще не тестировал версию 4 pakageA, но говорит, что это не должно быть проблемой, вы можете оставить ошибку.

В обоих случаях лучше тщательно проверить, не сломано ли оно.

Наконец, если вы хотите знать, почему вы должны делать это вручную, эта ссылка хорошо объясняет.

ohkts11
источник
4

Данный ответ не всегда работает. Если это не решит вашу проблему. Убедитесь, что вы также используете правильный символ в вашем package.json. Это очень важно, чтобы исправить эту головную боль. Например:

warning " > @angular/compiler-cli@5.2.7" has incorrect peer dependency "typescript@>=2.4.2 <2.7".
warning " > tsickle@0.25.6" has incorrect peer dependency "typescript@>=2.4.2 <2.6".

Так что моя машинопись должна быть между 2.4.2 и 2.6, верно?

Поэтому я изменил свою библиотеку машинописи с использования "typescript": "^2.7"на использование "typescript": "^2.5". Кажется правильным?

Неправильно.

Это ^означает, что вы в порядке с npm, используя "typescript": "2.5"или "2.6"или и "2.7"т.д ...

Если вы хотите узнать, что ^и что ~это значит, посмотрите: В чем разница между тильдой (~) и кареткой (^) в package.json?

Также вы должны убедиться, что пакет существует. Может быть, нет "typescript": "2.5.9"искать номера пакетов. Чтобы быть в безопасности, просто удалите~ или, ^если вы не хотите читать, что они значат.

Сэмюэл Томпсон
источник
Спасибо за это объяснение. Что произойдет, если я использую две библиотеки, где первая (например library-one) использует, например, одноранговый узел, package@<2.6а другой ( library-two) одноранговый узел package@>2.7? Тогда мне придется столкнуться с двумя версиями packageв моей кодовой базе? Как я узнаю, что когда я использую, library-oneя должен использовать это с package@2.5.9тем же временем, когда я использую, library-twoя должен использовать это с package@2.7.1?
Тоникс
@tonix попробуй. импортировать старый пакет и новый, который совместно использует пакет. npm волшебным образом справляется с этим. Он попытается использовать правильную версию для них обоих, если сможет, но он также может использовать обе версии одновременно через магию npm
Сэмюэль Томпсон
Вы имеете в виду, что эта функция NPM работает на importуровне ES6 ?
Тоникс
3

Итак, я долго боролся, пытаясь понять это. Вот ядерный вариант, когда вы исчерпали все остальные пути ..

  • Создайте новую папку на вашем компьютере.
  • Скачайте совершенно новую установку angular - я использовал это руководство: https://coursetro.com/posts/code/55/How-to-Install-an-Angular-4-App
  • Запустите его, убедитесь, что он работает
  • Затем установите ваши зависимости по одному из вашего файла package.json
  • Запустите его после того, как каждый установлен

Когда вы закончите, и это все еще работает, импортируйте ваш реальный код в этот новый проект. Исправьте любые ошибки компиляции новой версии угловых причин.

Вот что это сделало для меня ... 1 час переделок против 6 часов попыток выяснить, что WTF был неправильным ... Жаль, что я сделал это таким образом, чтобы начать ..

user230910
источник
ОП использует AngularJS
Эдрик
2

Сегодня доступен Angular 2 rc.7 , и у меня была похожая проблема с rxjs@5.0.0-beta.12зависимостью от UNMET PEER.

Если вас, как и меня, просто заменили @angular/...rc.6на @angular/...rc.7- этого мало. Потому что, например, @angular/routerне имеетrc.6 версии.

В этом случае лучше просмотрите package.json в разделе Быстрый старт

ktretyak
источник
ОП использует AngularJS
Эдрик
-6

Вы можете решить, установив зависимости UNMET глобально.

пример: npm install -g @ angular / common @ 4.4.6

установить каждый по одному. это сработало для меня.

Сринивас Джатот
источник
Это действительно лучшее решение, подумал? Глобальная установка, чтобы игнорировать реальную «проблему» для зависимостей проекта?
qx3
1
Это установит зависимости глобально на вашем компьютере. Ваши коллеги не смогут учитывать это в общей среде.
AC Patrice