Як я можу виправити npm UNMET PEER DEPENDENCY?


223

Я в Windows 10, з Node 5.6.0 і npm 3.6.0. Я намагаюся встановити кутовий матеріал і mdi в свою робочу папку. npm встановити mdi-кутові помилки 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

Не для Reza, тому вже пізно, але для будь-яких інших ... Спробуйте це: npm перегляньте кутові матеріали peerDependitions
peter70

1
Взагалі, ви не завжди можете вирішити невдалу залежність. Наприклад, він-пакет має залежність від other-package@^1.5.0, а у вас інстальовано other-package@2.0.0, можливо, вам не потрібно буде скасовувати версію. Було б краще перевірити, чи справді у вас проблеми з новою версією.
Джон Панкович

Відповіді:


203

npm більше не встановлює однорангові залежності, тому вам потрібно встановити їх вручну, просто зробіть npm installпотрібні deps, а потім спробуйте встановити головну ще раз.


Відповідь на коментар:

це правильно в цьому повідомленні, воно говорить, який депс ви пропускаєте

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


чи є спосіб знайти відвали для кутового матеріалу, щоб я міг встановити?
Реза

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

Це дозволить правильно встановити всі необхідні залежності.


3
що таке залежність від однолітків
aWebDeveloper

Коли ви встановлюєте пакет, він, в свою чергу, може залежати від конкретних версій інших пакетів. Якщо ви не надаєте правильну залежну версію пакета, тоді "Peer zavisnost" не виконано. Тому вам потрібно оновити очікувану версію залежних пакетів, щоб вирішити це.
JayKrish

4
Це не працювало для мене. Я все ще отримав попередження про необхідність однолітків.
Адам Зернер

1
Набагато чистіше, ніж прийняте рішення! Цей набір коду обробляє всі можливі випадки проблеми ОП, замість конкретної проблеми.
HoldOffHunger

використання команди очищення кеша npm дає помилку: станом на npm @ 5 кеш npm самолікується від проблем з корупцією та дані, витягнуті з кеша, гарантовано є дійсними. Якщо ви хочете переконатися, що все відповідає, замість цього використовуйте 'npm cache verify'. npm ERR! Якщо ви впевнені, що хочете видалити весь кеш, повторіть цю команду з --force.
CodeMonkey

30

У моєму випадку всі залежності вже були. Будь ласка, оновіть NPM у цьому випадку, оскільки він може бути збитий. Це вирішило мою проблему.

npm install -g npm

Працювали для мене. Я отримував помилку UNMET PEER DEPENDENCY typescriptпри спробі встановити tslint. оновлюючи npm, спочатку довелося встановити машинопис, а потім встановити tslint.
Ravimallya

Мені чомусь довелося запускати його не раз, поки не було оновлено всі власні залежності.
Coderer

Це зламало npm для мене і призвело до купі помилок.
Джек

14

npm-install-однолітки працювали на мене.

npm install -g npm-install-peers

1
Не працювало для мене: "Схоже, цей пакет не має певнихзалежностей". Однак у мене є кілька повідомлень на кшталт "npm ERR! Peer dep відсутні": @ angular / common @ ^ 5.0.0 || ^ 6.0.0, потрібне @ agm / core @ 1.0.0-beta.3 "
Almir Campos

2
Цей пакет встановлює лише прямі однорангові пакети поточного пакету і плашки не обробляють однорангові deps пакети (однолітки дітей).
Олексій Скрипник

7

Однією з найбільш можливих причин цієї помилки може бути те, що ви вказали старішу версію в пакеті.json. Щоб вирішити цю проблему, змініть версії пакета.json, щоб вони відповідали тим, на що скаржиться npm.

Після завершення запустіть npm install і voila !!.


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, але пакет B@3.3.0 потребує версії 3.xx пакетаA. ( пояснення ^ )

Таким чином, ви можете усунути цю помилку, зменшивши пакет packageA до 3.xx, але зазвичай ви не хочете знижувати пакет.
Хороша новина полягає в тому, що в деяких випадках packageB просто не йде в ногу з packageA, і обслуговуючий пакет packageB дуже намагається підняти рівну залежність пакета packageA до 4.xx.
У цьому випадку ви можете перевірити, чи існує вища версія пакетаB, що потрібна версія 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, але каже, що це не повинно бути проблемою, ви можете розглянути можливість залишити помилку.

В обох випадках найкраще ретельно перевірити, чи нічого не порушує.

Нарешті, якщо ви хочете знати, чому вам потрібно вручну робити такі дії, це посилання добре пояснює.


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". Здається, правильно?

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

В ^означає , що ви все в порядку з НПМ з використанням "typescript": "2.5"або "2.6"або і "2.7"т.д. ...

Якщо ви хочете дізнатися, що означає, ^і що ~це означає ?

Також ви повинні переконатися, що пакет існує. Можливо, немає "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?
тонікс

3

Гаразд, я довго боровся, намагаючись зрозуміти це. Ось ядерний варіант, коли ви вичерпали всі інші способи ..

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

Коли ви закінчите, і він все ще працює, імпортуйте свій фактичний код у цей новий проект. Виправити будь-які помилки компіляції новіша версія кутових причин.

Ось що це зробило для мене .. 1 годину переробки проти 6 годин спроб з'ясувати wtf було не так .. бажаю, щоб я зробив це так, щоб почати ..


OP використовує AngularJS
Edric

2

Сьогодні доступний Angular 2 rc.7 , і у мене була аналогічна проблема з rxjs@5.0.0-beta.12ВІДГОТОВЛЕННЯМ PEER DEPENDENCY.

Якщо ви, як і я, просто замінити @angular/...rc.6на @angular/...rc.7- це мало. Тому що, наприклад, @angular/routerне має rc.6версії.

У цьому випадку краще перегляньте package.json у Швидкому старті


OP використовує AngularJS
Edric

-6

ви можете вирішити, встановивши залежності UNMET у всьому світі.

приклад: npm install -g @ angular / common @ 4.4.6

встановити кожен по одному. це працювало для мене.


Це справді найкраще рішення, подумали? Встановлення глобально, щоб ігнорувати фактичну "проблему" залежностей від проекту?
qx3

1
Це дозволить встановити залежності у вашому світі. Ваші однолітки не зможуть це врахувати в спільному середовищі.
AC Patrice
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.