NPM не устанавливает зависимости модуля

151

Это мой package.jsonмодуль, который я включаю в родительский проект:

{
  "version": "0.0.1",
  "name": "module-name",
  "dependencies": {
    "express": "3.3.4",
    "grunt": "0.4.1",
    "grunt-contrib-compass": "0.4.0",
    "grunt-contrib-copy": "0.4.1",
    "grunt-contrib-cssmin": "0.4.1",
    "grunt-contrib-jshint": "0.6.3",
    "grunt-contrib-requirejs": "0.4.1",
    "grunt-contrib-uglify": "0.2.2",
    "grunt-contrib-watch": "0.5.1",
    "grunt-express-server": "0.4.1",
    "grunt-karma": "0.4.5",
    "grunt-regex-replace": "0.2.5",
    "request": "2.25.0"
  },
  "scripts": {
    "postinstall": "grunt install"
  }
}

Стоит отметить, что этот модуль содержится в закрытом репо, и я включаю его в родительский репозиторий, package.jsonнапример:"module-name": "git+ssh://git@myserver:user/module-name.git"

Ахмед Нуаман
источник
Ваш package.json выглядит нормально, как и строка, которую вы используете для его включения. Вы получаете сообщение об ошибке? Git на вашем пути?
Поида
1
Я не получаю ошибки за са, модуль устанавливается, но мой postinstallскрипт не выполняется, потому что локальные gruntпакеты не найдены, так как они не установлены NPM
Ахмед Нуаман
1
Эта проблема все еще существует в ноябре 2016 года. Я сделал чистую установку рабочего модуля на новый компьютер. Ответ @ Мохсена исправил это.
Джо Лапп

Ответы:

152

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

В первом люди перечисляют несколько обходных путей, которые вы можете попробовать.

Альтернативное решение может быть (немного хакерским) для явного перечисления зависимостей как зависимостей первого уровня. Это требует от вас ведения списка, но практически это должно быть сделано очень редко.

allprog
источник
1
@ Flame2057 приятно знать, что тебе не повезло, хотя и не слишком информативно. Вы можете сформулировать вопрос, надеюсь, у сообщества есть знания, которые нужно решить. Радоваться, веселиться!
allprog
Один дополнительный шаг был необходим для меня. Мне пришлось щелкнуть правой кнопкой мыши на «Зависимости» в моем проекте и выбрать «Восстановить пакеты» после выполнения других шагов, упомянутых здесь (удалить node_modules и package.lock.json, затем npm install).
Taersious
114

У меня была очень похожая проблема, удаление всей node_modulesпапки и повторная установка работали для меня. Узнал этот трюк из шоу IT Crowd !

rm -rf node_modules
npm install
Мохсен
источник
Это на самом деле работает для меня. Я думаю, что это действительно странно - что вызывает этот глюк? В любом случае, если я удалю папку и перезапущу npm install, то это сработает. Предварительно в этом подкаталоге ничего не будет установлено. Теперь все это устанавливается там.
CtheGood
Спасибо @Moshen. Я удалил старую версию Node и сделал чистую установку. Я удалил все мои node_modules / глобально, но забыл удалить из некоторых существующих приложений. Мне пришлось удалить папку node_modules в каталоге каждого существующего приложения, а затем запустить npm install.
wilblack
Старый добрый «ты пробовал перезапустить с нуля ?». Это отлично сработало для меня.
Марко Аурелио Делё
Хотя приятно знать, что существует обходной путь, это действительно попахивает «перезагрузкой вашей машины и попытайтесь снова» и просто скрывает реальную проблему. У меня похожая проблема с установкой NPM (процесс завершается немедленно без сообщения), и одним из обходных путей является удаление папки node_modules и переустановка; что не внушает мне уверенности в том, что мы понимаем, что здесь происходит.
Келли С. Френч
1
Это сработало для меня. Я бы мог +1 снова за ссылку на ИТ-толпу.
текселат
33

Я использую машину Windows.

  1. Я удалил папку node_modules.
  2. Каким-то образом файл package.lock.json создается. Я удалил этот файл.
  3. Затем установите npm.
  4. Чистая сборка.
  5. Запустить.
Virat18
источник
14
Этот ответ должен получить больше любви. Файл package.lock.json меня облажал.
Mwilcox
16

если вы унаследовали этот код, возможно, что зависимости и версии были заблокированы, и у вас есть файл ./npm-shrinkwrap.json.

если ваша зависимость не указана в этом файле, она никогда не будет установлена ​​с помощью npm installкоманды.

вам нужно будет вручную установить пакеты, а затем запустить их, npm shrinkwrapчтобы обновить файл shrinkwrap.

Рико Родрикес Коллинз
источник
2
У меня была проблема, когда при ручной установке пакета был создан package-lock.jsonфайл после обновления до узла 8.0.0 и npm 5.0.0. После этого при запуске npm installустановится только один пакет вместо всех моих зависимостей. Удаление package-lock.jsonи повторный запуск npm installрешили проблему для меня.
Monkpit
1
@Monkpit Это решило и меня, спасибо! package-lock.jsonмешал.
VirtualWolf
10

Я подозреваю, что вы столкнулись с проблемой, когда ваш package.jsonфайл не находится в том же каталоге, что и ваш Gruntfile.js. Когда вы запускаете ваши grunt xxxкоманды, вы получаете сообщение об ошибке вроде:

Local Npm module "xxx" not found. Is it installed?

На данный момент решение:

  • Создайте package.json в том же каталоге, что и Gruntfile.js
  • Определите модули, необходимые для вашего проекта grunt
  • Выполните, npm installчтобы загрузить их локально
  • Теперь требуемая команда grunt должна работать.

ИМХО, это печально, что мы не можем иметь загруженные модули разрешения из родительского модуля npm (то есть package.json в родительском каталоге в том же проекте). Обсуждение здесь, кажется, указывает на то, что это было сделано, чтобы избежать загрузки «глобальных» модулей, но я думаю, что мы хотим вместо этого загружать из модулей «мой проект».

kctang
источник
Итак, это структура моего родительского проекта (это тот, который импортирует проект подмодуля): cl.ly/image/020E0b3I0t1A и структура моего проекта подмодуля : cl.ly/image/2q0L3l1v0s40 ; Вы можете видеть, что оба содержат Gruntfile.jsи оба содержат package.jsonна одном уровне.
Ахмед Нуаман
1
Это не проблема grunt, это проблема npmнерекурсивной установки зависимостей в моем проекте подмодуля.
Ахмед Нуаман
9

OP может быть верным для более старой версии узла. Однако с узлом 4.4.1 я столкнулся с тем же.

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

Я нашел это, запустив npm update.

После обновления до последней версии (4.4 -> 5.9); это исправлено.

Nrj
источник
8

В моем случае это помогло удалить node_modulesи package-lock.json.

После этого просто переустановите все с npm install.

Ларс Клизинг
источник
8

Также убедитесь, что имя вашего пакета правильно принято:

НЕПРАВИЛЬНО:

{
    "name":"My Awesome Package"
}


ВЕРНЫЙ

{
    "name": "my-awesome-package-name"
}
Caius
источник
1
Да, у меня был пробел в имени, и он не был установлен должным образом.
Ansjovis86
1
не только в отношении места, но и в отношении того, что он использовал в имени «-», я также столкнулся с той же проблемой, поставил - или _ в названии, это сработает.
Molagbal
4

Возможно, вам придется установить grunt-cli, попробуйте это перед установкой npm:

sudo npm install -g grunt-cli

Это исправит, что grunt не выходит для меня, вам также понадобится действительный файл grunt.

Источник: https://stackoverflow.com/a/16456467/241294

poida
источник
Что происходит, когда вы пытаетесь выполнить команду «grunt» в командной строке? Это существует на вашем пути? Вы правы, это выглядит так, как будто оно установлено с вашего компьютера. Вы установили его с помощью sudo и -g?
Поида
Это не проблема с ворчанием:~ ᐅ which grunt /opt/local/bin/grunt
Ахмед Нуаман
Кроме того, когда я клонировать сам репозиторий, а не через НПМ и запустить npm installи grunt installон работает отлично. Проблема в том, что NPM, похоже, не устанавливает зависимости репо, как указано вpackage.json
Ахмед Нуаман
В каком каталоге вы ищите зависимости пакетов? Они должны быть не на верхнем уровне, а под: top-level-package / node_modules / module-name / node_modules. Может ли быть так, что grunt не находит файл grunt, потому что он работает не в том каталоге?
Поида
Это не проблема grunt, когда вы устанавливаете модули с помощью NPM, он обычно предоставляет резюме в конце любых зависимостей этого модуля, которые уже были установлены; при установке данного модуля я не получаю сумму установленных модулей зависимостей.
Ахмед Нуаман
4

На всякий случай, если кто-то страдает от этого затруднения и совершает ту же асаниновую ошибку, что и я, вот что было в моем случае. После того, как я в течение часа ударился головой о стену, я понял, что мой JSON неправильно вложен, а ключ «зависимости» находится внутри ключа «хранилище».
Излишне говорить, что никаких ошибок не было видно, и модули не были установлены.

КГВР
источник
3

Другой способ обойти это - добавить это в package.jsonраздел скриптов модуля.

"preinstall": "npm install {Packages You depend on}"

то, что это сделает, это установит все пакеты, необходимые модулю, и вы не получите эту ошибку.

Ахмед Фати
источник
3

происходит со старой версией узла. используйте последнюю версию узла следующим образом:

$ nvm use 8.0
$ rm -rf node_modules
$ npm install
$ npm i somemodule

редактировать: также убедитесь, что вы save.
например:npm install yourmoduleName --save

Deke
источник
2

Я получал эту ошибку, когда я установил чистую среду Node dev на Windows.

Чтобы это исправить, я вошел в свой новый каталог проекта (с которым я только что работал yo angular) и набрал две команды:

npm install -g grunt --save-dev

Это установит локальные зависимости для вашего проекта. Следующий:

npm install

Это обеспечит установку всех ваших (новых) зависимостей проекта.

Тада!

Джесси Лоусон
источник
2

Стоит упомянуть, чтобы убедиться, что ваши зависимости должны быть dependenciesчастью вашей package.json(в отличие от devDependencies).

Моя проблема была в основном такой же, как OP:

  • установка частного репо (давайте назовем это repo1) через "module-name": "git+ssh://git@myserver:user/my-repo-name.git"другое репо (назовем это repo2),
  • в repo2's node_modules, не было ни одной зависимости от пакета repo1.
  • Моя глупая ошибка! .. repo1перечисляла эту зависимость devDependenciesвместоdependencies
  • Переместить зависимость в моем repo1package.jsonот devDependencies доdependencies
  • По моему repo2, я удалил свою, node_modulesи package-lock.jsonсделал npm install, вуаля! ... зависимость была там!
cafesanu
источник
Я объявил переменную среды NODE_ENV = production в моем файле Docker над командой npm install, из-за чего devDependencies не устанавливаются
Pieter De Clercq
0

У меня такая же проблема. Но на одной машине у одного проекта был хороший package.json, где все мои зависимости успешно установлены. И в другом проекте мои зависимости package.json не были установлены, что бы я ни делал. Я просто скопировал package.json и вставил в этот другой проект. И это сработало! Разница, которую я обнаружил, заключалась только в пустой строке в начале файла. Не знаю, или это влияет на что-нибудь, может быть, какая-то другая проблема. Но проблема была только в файле package.json.

mansim
источник
0

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

WinnersProx
источник