Почему npm install говорит, что у меня есть неудовлетворенные зависимости?

404

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

npm ПРЕДУПРЕЖДЕНИЕ неудовлетворенная зависимость / Users / seanmackesey / google_drive / code / explore / generator / node_modules / findup-sync / node_modules / glob требует graceful-fs@'~1.2.0 ', но загрузит

Я должен быть смущен тем, что именно npm installделает. Если это обнаруживает зависимость, разве это не должно установить это? При каких условиях он выдает мне такие сообщения об ошибках, и как я могу разрешить зависимости?

Шон Макси
источник

Ответы:

397

Я считаю, что это потому, что разрешение зависимостей немного нарушено, см. Https://github.com/npm/npm/issues/1341#issuecomment-20634338

Ниже приведены возможные решения:

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

  2. Перестройте ваш package.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снова. Видеть

Dule
источник
22
Удаление модулей узла и очистка кеша сделали это для меня.
MarkoHiel
4
удаление 'node_modules', запуск 'npm cache clean', а затем запуск 'npm install' исправили мою проблему. Мне пришлось запустить npm_install три раза, пока все зависимости не загрузились без ошибок.
Хендрикс
2
если npm cache cleanне работает по причинам доступа, попробуйте sudo npm cache clean.
Сооруш
12
@ Слепое слепое добавление sudo к вещам, которые не работают правильно, волшебным образом не исправляет их, просто означает, что вы не знаете, что происходит.
Эдгар Арутюнян
5
почему когда-либо другое «решение» для npm включает rm r node_modules? и почему в большинстве случаев это действительно единственный вариант? это не совсем то, как я полагаю, менеджер пакетов должен работать как
phil294
83

Это случилось со мной, когда WIFI вышел из строя во время npm install. Снятие node_modulesи повторный запуск npm installисправили это.

гирооптическая астронавигационная система
источник
26
и попробуй npm cache clean.
января
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

Это сделано!

zatamine
источник
5
После запуска sudo npm update -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»
Александр Миллс
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.

Источник: https://stackoverflow.com/a/13119867/4082503

Vinay Vemula
источник
Это помогло мне, так как мой хост перенаправлял трафик.
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 css-loader@^0.23.1
npm install css-loader@^0.23.1

achasinh
источник
2

Это решило это для меня:

  1. Исправьте номера версий в package.jsonсоответствии с ошибками;
  2. Удалить node_modules( rm -rf node_modules);
  3. Rerun npm install.

Повторите эти шаги, пока не будет больше ошибок.

user1585939
источник
1

Что-то в том же духе, я бы добавил еще один шаг.

Обратите внимание, что в версии npm> 1.4.9 npm install устанавливает devDependencies. Сначала попробуйте удалить существующие модули и кеш:

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

Тогда попробуйте:

npm install --dev
npm update --dev

Это по крайней мере разрешит рекурсивное разрешение зависимостей.

Джон Доу
источник
6
для чего нужен флаг --dev?
Александр Миллс
1

--dev рекурсивно устанавливает devDependencies (и работает вечно ..), как это может помочь устранить различия в версиях?

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

arielhad
источник
1

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

npm update -g

и смог установить пакет после этого.

wuliwong
источник
1

Я пытался работать над автоматизированной системой развертывания, которая работает npm install, поэтому многие из этих решений не будут работать для меня в автоматическом режиме. Я не был в состоянии удалить / пересоздать, node_modules/и при этом я не мог легко изменить версии Node.js.

Так что в итоге я запустил npm shrinkwrap- добавил npm-shrinkwrap.jsonфайл в свой комплект развертывания и запустил установку оттуда. Это решило проблему для меня; с файлом shrinkwrap в качестве «помощника» npm, похоже, смог найти нужные пакеты и установить их для меня. (Shrinkwrap имеет и другие функции, но это было то, что мне было нужно в данном конкретном случае).

Uberbrady
источник
1

Я столкнулся с этой проблемой при установке пакетов реагирования, и это сработало для меня: npm install --save <package causing this error>

корп
источник
1

В моем случае обновление npm решило это.

sudo npm install -g npm
Марсело Гумьеро
источник
1

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

Если у вашего проекта есть npm-shrinkwrap.json, убедитесь, что вы запускаете npm shrinkwrapего регенерацию, каждый раз, когда вы добавляете / удаляете / меняете package.json.

Marius
источник
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';.
Аман Агнихотри
источник