Чому встановлення npm говорить про те, що у мене є невиконані залежності?


404

У мене є пакет вузлів. Коли я запускаю npm installз кореня пакета, він встановлює купу речей, але потім друкує кілька повідомлень про помилки, які виглядають приблизно так:

npm WARN unmet зависимості / Користувачі / seanmackesey / google_drive / код / ​​досліджувати / генератор / node_modules / findup-sync / node_modules / glob вимагає graceful-fs@'~1.2.0 ', але завантажується

Мені треба плутати, що саме npm installробить. Якщо він виявить залежність, чи не повинен він її встановлювати? За яких умов воно дає мені такі повідомлення про помилки, як я можу вирішити залежності?

Відповіді:


397

Я вважаю, це тому, що роздільна здатність залежності дещо порушена, дивіться https://github.com/npm/npm/isissue/1341#issuecomment-20634338

Нижче наведено можливе рішення:

  1. Вручну потрібно встановити модулі верхнього рівня, що містять невдалі залежності: npm install findup-sync@0.1.2

  2. Переструктуруйте пакет.json. Поставте всі модулі високого рівня (слугуючи залежністю для інших модулів) внизу.

  3. Повторіть npm installкоманду.

Проблема може бути спричинена тим, що npm не зможе завантажити весь пакет через вичерпаний час чи щось інше.

Примітка: Ви також можете встановити невдалі пакети вручну, використовуючи npm install findup-sync@0.1.2.

Перед запуском npm installможе допомогти виконання наступних кроків:

  • видаліть node_modules за допомогою rm -rf node_modules/
  • бігати npm cache clean

Чому іноді необхідне видалення node_modules? Якщо вкладений модуль не вдасться встановити протягом npm install, подальший npm installне виявить тих відсутніх вкладених залежностей.

Якщо це так, іноді достатньо зняти залежність верхнього рівня цих відсутніх вкладених модулів та запустити npm installзнову. Подивитися


22
Видалення модулів вузла та очищення кеша змусило мене працювати.
MarkoHiel

4
видалення 'node_modules', запуск 'npm cache clean', а потім запуск 'npm install' виправив мою проблему. Мені довелося тричі запустити 'npm_install', поки я не завантажив усі залежності без помилок.
hendrix

2
якщо npm cache cleanне працює з причин доступу, спробуйте sudo npm cache clean.
Соруш

12
@Soroush наосліп просто додавання судо до речей, які не працюють належним чином, не магічно їх виправляє, це означає, що ти не знаєш, що відбувається.
Едгар Арутьоуніан

5
чому коли-небудь інше "рішення" для npm включає rm r node_modules? і чому це так, що це справді єдиний варіант у більшості випадків? це не зовсім так, як я думаю, менеджер пакунків повинен працювати так
phil294

83

Це сталося зі мною, коли WIFI знизився під час npm install. Видалення node_modulesта повторний запуск npm installвиправлено.


26
і спробуйте npm cache clean.
ijse

5
Перевстановлення вузла, ймовірно, не потрібно, але між цим npm cache cleanі видаленням node_modulesця порада працювала для мене.
RichLitt

@RichLitt, Ага npm cache clean, для мене було недостатньо, мені довелося видалити node_modulesтак само, щоб змусити його працювати після відмови мережі під час "встановлення".
Марк Томлін

Я плутаю, який node_modulesкаталог видалити? У мене є аналогічна проблема з помилкою/usr/local/lib/node_modules/npm/node_modules/read-installed/node_modules/readdir-scoped-modules requires graceful-fs@'^4.1.2'
wuliwong

1
@wuliwong Найвищий рівень.
geon

33

Я вирішив проблему за допомогою цих командних рядків

  • $ rm -rf node_modules/
  • $ sudo npm update -g npm
  • $ npm install

Готово!


5
Після запуску оновлення sudo npm -g npm, мій npm виявився марним, будь-яка спроба встановити що-небудь призводить до "npm ERR! Неможливо знайти модуль" read-package-json "",
мені

Це працювало на мене і на інших людей, можливо, у вас є інша проблема. Спробуйте встановити модуль read-package-json глобально sudo npm install -g read-package-jsonабо перевстановіть npm
zatamine

8
Застереження: ви не повинні використовувати sudo npm, пропонується замість цього змінити дозволи або права власності на каталог. npm хоче писати теж.
Sgnl

1
Ви можете також додати "npm cache clean"
Олександр Міллз

1
Не використовуйте sudoз npm
Грант

11

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

Команда npm listдає вам список усіх встановлених node_modules. Коли я перейшов з версії 1.4.2 до версії 2.7.4, багато модулів, які раніше були позначені WARN unmet dependency, більше не відзначалися як такі.

Щоб оновити npm, слід ввести npm install -g npmна MacOSX або Linux. У Windows я виявив, що повторна завантаження та повторний запуск інсталятора nodejs є більш ефективним способом оновлення npm.


У мене була така ж проблема з версією npm, розповсюдженою в CentOS 7 репозиції. Я встановив останню версію npm з node.js, і проблема зникла, тому я вважаю, що ви праві, це може бути проблема зі старою версією.
Елуан Керілл-Евен

9

Наведені вище відповіді не допомогли мені повністю навіть після видалення node_modules каталогу.

Нижче команда допомогла мені нарешті:

npm config set registry http://registry.npmjs.org/

Зауважте, що це тягне модулі вузлів через незахищене HTTP-з'єднання.

Src: https://stackoverflow.com/a/13119867/4082503


Це допомогло мені, як і мій господар перенаправляв трафік.
dimiguel

1
@dimgl приємно знати :)
Vinay Vemula

1
@Dejel ви також спробували інші відповіді. Можливо, вам доведеться запустити npm installкілька разів та / або встановити деякі пакети вузлів один за одним.
Вінай Вемула

4

Для кожного -- UNMET PEER DEPENDENCY, для екс. -- UNMET PEER DEPENDENCY rxjs@5.0.0-rc.2, встановіть цю залежність, npm install --save rxjs@5.0.0-rc.2доки у вас більше не будеUNMET DEPENDENCIES .

Щасти.


1
Залишає мене з тими ж помилками, включаючи нову:ERR! code 1
Wouter Vanherck

1
@WouterVanherck, будь ласка, спробуйте rm -rf node_modules, тоді npm cache cleanі npm install. Якщо це все ще не працює, я пропоную вам знову rm -rf node_modules, тоді npm i -g yarnі тоді yarn install. Пряжа досить гарна в управлінні node_modules. Щасти.
Акаш

1
Так, є для чого peerDependencies. Щоб підштовхнути вас до свідомого вибору версії.
Kamafeather

3

я біжу npm list і встановив усі пакунки, перелічені як UNMET DEPENDENCY

Наприклад:

├── UNMET DEPENDENCY css-loader@^0.23.1
npm install css-loader@^0.23.1


2

Це вирішило це для мене:

  1. Виправте номери версій у package.json , відповідно до помилок;
  2. Видалити node_modules(rm -rf node_modules );
  3. Рерун npm install.

Повторіть ці дії, поки не буде більше помилок.


1

Щось подібне, я би додав ще один крок.

Зауважте, що у npm-версії> 1.4.9, 'npm install' встановлює devDependitions. Спочатку спробуйте видалити існуючі модулі та кеш:

remove node_modules $ rm -rf node_modules/
run $ npm cache clean

Потім спробуйте:

npm install --dev
npm update --dev

Це принаймні дозволить вирішити рекурсивне рішення залежності.


6
для чого прапор --dev?
Олександр Міллс

1

--dev встановлює devDependpendi рекурсивно (i запускається назавжди).

Ви можете спробувати видалити папку node_moduls, потім очистити кеш npm, а потім знову запустити 'npm i'


1

У мене була схожа проблема, коли я встановлював CLI React Native. Я не знав, який саме /node_modulesкаталог я мав би видалити, прочитавши відповіді тут. Я врешті-решт просто побігла

npm update -g

і змогла встановити пакет після цього.


1

Я намагався працювати над автоматизованою системою розгортання, яка працює npm install, тому багато з цих рішень не працювали б для мене в автоматизованому режимі. Видалити / відтворити мені не вдалосяnode_modules/ а також не міг легко змінити версії Node.js.

Тож я закінчився запуском npm shrinkwrap- додавши npm-shrinkwrap.jsonфайл до мого пакета розгортання та запускаючи звідти встановлення. Це вирішило для мене проблему; з файлом скорочення, як "помічником", начебто npm зможе знайти потрібні пакунки та встановити їх для мене. (Shrinkwrap також має інші особливості, але саме для цього я потребував у цьому конкретному випадку).


1

Я зіткнувся з цією проблемою, коли встановлював реагуючі пакети, і це працювало для мене: npm install --save <package causing this error>



1

npm installвстановить усі пакети з npm-shrinkwrap.json, але може ігнорувати пакунки в package.json, якщо вони не встановлені в попередньому.

Якщо у вас є проект npm-shrinkwrap.json, переконайтеся, що ви npm shrinkwrapрегенеруєте його щоразу, коли ви додаєте додавання / видалення / зміну package.json.



0

Оновлення до 4.0.0

Оновлення до 4 - це так само просто, як і оновлення ваших кутових залежностей до останньої версії та двічі перевірити, чи хочете ви анімації. Це буде працювати для більшості випадків використання.

На Linux / Mac:

npm install @angular/{common,compiler,compiler-cli,core,forms,http,platform-browser,platform-browser-dynamic,platform-server,router,animations}@latest typescript@latest --save 

У Windows:

npm install @angular/common@latest @angular/compiler@latest @angular/compiler-cli@latest @angular/core@latest @angular/forms@latest @angular/http@latest @angular/platform-browser@latest @angular/platform-browser-dynamic@latest @angular/platform-server@latest @angular/router@latest @angular/animations@latest typescript@latest --save

Потім виконайте команду ng serve або npm start, яку ви зазвичай використовуєте, і все має працювати.

Якщо ви покладаєтеся на анімації, імпортувати новий BrowserAnimationsModuleз @angular/platform-browser/animationsдокорінно NgModule. Без цього ваш код буде компілюватися та запускатися, але анімація спричинить помилку. Імпорт з Росії @angular/coreбув застарілим, використовуйте імпорт з нового пакету

import { trigger, state, style, transition, animate } from '@angular/animations';.
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.