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 на вашому шляху?
poida

1
Я не отримую жодних помилок, модуль встановлюється, але мій postinstallсценарій виходить з ладу, оскільки локальні gruntпакети не знайдені, оскільки вони не встановлені NPM
Ахмед Нуаман

1
Ця проблема існує ще в листопаді 2016 року. Я зробив чисту установку робочого модуля на новому комп’ютері. @ Відповідь Мохсена виправила це.
Джо Лапп

Відповіді:


152

Схоже, ви потрапили на помилку, який існує досить довго і не має рішення ще. У цьому сховищі npm є кілька відкритих проблем для цього випадку:

У першій люди перераховують кілька обхідних завдань, які ви можете спробувати.

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


1
@ Flame2057 добре знати, що вам не пощастило, хоча і не надто інформативно. Ви можете заздалегідь і сформулювати питання, сподіваємось, громада має знання для вирішення. Веселіться!
allprog

Для мене був потрібен ще один крок. Мені довелося клацнути правою кнопкою миші на "Залежності" у своєму проекті та вибрати "Відновити пакети", виконавши інші кроки, згадані тут (видалити node_modules та package.lock.json, потім встановити npm).
Taersious

113

У мене була дуже схожа проблема, видалення всієї node_modulesпапки та повторна інсталяція працювали на мене. Дізналися цю хитрість із шоу IT Crowd !

rm -rf node_modules
npm install

Це насправді спрацювало для мене. Я думаю, що це насправді дивно - що викликає цей глюк? Незалежно від того, якщо я видаляю папку і запускаю npm install, це працює. Заздалегідь у цьому підкаталозі нічого не встановлено. Тепер це все встановлено там.
CtheGood

Дякую @Moshen. Я видалив стару версію Node і зробив чисту установку. Я видалив усі свої node_modules / глобально, але забув видалити їх із деяких існуючих додатків. Мені довелося видалити папку node_modules з каталогу кожного існуючого додатка, а потім запустити npm install.
wilblack

Добрий старий "ви спробували перезапустити з нуля підхід?". Це спрацювало для мене чудово.
Marco Aurélio Deleu

Хоча приємно знати, що існує вирішення, це справді приховує "перезавантажити вашу машину і спробуйте ще раз" і просто приховує справжню проблему. У мене є аналогічна проблема з встановленням NPM (процес закінчується негайно без повідомлення), і одним із обхідних шляхів є видалення папки node_modules та перевстановлення; що не наповнює мене впевненістю, що ми розуміємо, що тут відбувається.
Келлі С. Французька

1
Це працювало для мене. Якби я міг би поставити +1 ще раз для посилань на ІТ-натовп.
texelate

32

Я використовую машину Windows.

  1. Я видалив папку node_modules.
  2. Так чи інакше створюється файл package.lock.json. Я видалив цей файл.
  3. Потім встановити npm.
  4. Чиста збірка.
  5. Біжи.

14
Ця відповідь потребує більше любові. Файл package.lock.json накрутив мене.
mwilcox

16

якщо ви успадкували цей код, можливо, залежності та версії були заблоковані та у вас є файл ./npm-shrinkwrap.json.

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

вам потрібно буде встановити пакунки вручну, а потім запустити, npm 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
  • Визначте модулі, необхідні вашим грунтовим проектом
  • Виконати, npm installщоб завантажити їх локально
  • Тепер потрібна команда grunt повинна працювати.

IMHO, сумно, що ми не можемо завантажувати модулі вирішення проблем, які завантажуються з батьківського npm-модуля (тобто package.json в батьківському каталозі в рамках одного проекту). Дискусія тут, схоже, вказує на те, що це було зроблено, щоб уникнути завантаження "глобальних" модулів, але я думаю, що ми хочемо завантажувати з модулів "мій проект".


Отже, це структура мого батьківського проекту (це той, який імпортує проект підмодуля): 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); це виправлено.


8

У моєму випадку це допомогло видалити node_modulesі package-lock.json.

Після цього просто перевстановіть все npm install.


8

Також перевірте, чи правильно прийнято ім'я вашого пакета:

WRONG:

{
    "name":"My Awesome Package"
}


ПРАВИЛЬНО

{
    "name": "my-awesome-package-name"
}

1
Так, у мене було пробіл у назві, і воно не встановлено належним чином.
Ansjovis86

1
не тільки для простору, це також стосується "-", яке він використовував в імені, я також зіткнувся з тим же питанням, поставити - або _ в імені, воно буде працювати.
молагбал

4

Можливо, вам доведеться встановити grunt-cli, спробуйте це, перш ніж робити npm install:

sudo npm install -g grunt-cli

Це виправляє проблему для мене, а також потрібний файл grunt.

Джерело: https://stackoverflow.com/a/16456467/241294


Що станеться, коли ви спробуєте команду 'grunt' у вашому командному рядку? Чи існує вона на вашому шляху? Ви маєте рацію, схоже, це встановлено з вашої пасти. Ви встановили це з sudo та -g?
poida

Це не проблема з бурчанням:~ ᐅ which grunt /opt/local/bin/grunt
Ахмед Нуаман

Крім того, коли я клоную сам репо, а не через NPM і запускаю, npm installі grunt installце чудово працює. Проблема полягає в тому, що NPM, здається, не встановлює залежності від репо, як зазначено вpackage.json
Ахмед Нуаман

У якому каталозі ви шукаєте залежності пакунків? Вони не повинні знаходитись на найвищому рівні, а під: верхній рівень пакету / node_modules / ім'я модуля / node_modules. Чи може бути, що грунт не знаходить файл grunt, оскільки він працює в неправильній директорії?
poida

Це не проблема 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


2

Я отримував цю помилку, коли встановлював чисте середовище розробки Node на Windows.

Щоб виправити це, я зайшов у свій новий каталог проектів (який я тільки що скелював yo angular) і набрав дві команди:

npm install -g grunt --save-dev

Це встановить локальні грунтові залежності до вашого проекту. Далі:

npm install

Це забезпечить встановлення всіх ваших (нових) залежностей від проекту.

Тада!


2

Варто згадати, щоб переконатися, що ваші залежності повинні бути в dependenciesчастині вашої package.json(на відміну від devDependencies).

Моя проблема в основному збігалася з ОП:

  • встановлення приватного репо (назвемо його repo1) за допомогою "module-name": "git+ssh://git@myserver:user/my-repo-name.git"іншого репо (назвемо його repo2),
  • в repo2«з node_modules, один пакет залежність від repo1там не було.
  • Моя дурна помилка! .. repo1перераховувала цю залежність devDependenciesзамістьdependencies
  • Перемістити залежність в моєму repo1х package.jsonвід devDependencies доdependencies
  • У своєму repo2я зняв свою node_modulesі package-lock.json, справді npm install, вуаля! ... залежність була там!

Я оголосив змінну NODE_ENV = виробниче середовище у своєму Dockerfile над командою npm install, що спричиняє невстановлення devDependitions
Pieter De Clercq

0

У мене була така ж проблема. Але на одній машині один проект мав хороший package.json, де всі мої залежності успішно встановлені. І в іншому проекті мої залежності package.json не були встановлені, що б я не робив. Я просто скопіював package.json і вставив у той інший проект. І це спрацювало! Різниця, яку я знайшов, була лише порожнім рядком на початку файлу. Не знаєте, чи це на щось впливає, можливо, якась інша проблема. Але проблемою був лише файл package.json.


0

Я думаю, що я також зіткнувся з цією проблемою, і найкращим рішенням, який я знайшов, було подивитися на мою консоль і з'ясувати помилку, яку кидали. Отже, я уважно прочитав це і виявив, що проблема полягає в тому, що я не вказав репортаж, опис та дійсне ім’я у своєму package.json. Я додав ці відомості і все було гаразд.

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