Как устранить ошибку «Не удается найти модуль» с помощью Node.js? - PullRequest
519 голосов
/ 26 января 2012

После извлечения модуля из GitHub и следуя инструкциям по его сборке, я пытаюсь вытянуть его в существующий проект, используя:

> npm install ../faye

Похоже, это помогает:

> npm list
/home/dave/src/server
└─┬ faye@0.7.1
  ├── cookiejar@1.3.0
  ├── hiredis@0.1.13
  └── redis@0.7.1

Но Node.js не может найти модуль:

> node app.js
node.js:201
        throw e; // process.nextTick error, or 'error' event on first tick
              ^
Error: Cannot find module 'faye'
    at Function._resolveFilename (module.js:334:11)
    at Function._load (module.js:279:25)
    at Module.require (module.js:357:17)
    at require (module.js:368:17)
    at Object.<anonymous> (/home/dave/src/server/app.js:2:12)
    at Module._compile (module.js:432:26)
    at Object..js (module.js:450:10)
    at Module.load (module.js:351:31)
    at Function._load (module.js:310:12)
    at Array.0 (module.js:470:10)

Я действительно хочу понять, что здесь происходит, но я немного растерялся относительно того, где искать дальше,Есть предложения?

Ответы [ 26 ]

457 голосов
/ 26 января 2012

Использование npm install устанавливает модуль только в текущем каталоге (в подкаталоге с именем node_modules). App.js находится под home/dave/src/server/? Если нет, и вы хотите использовать модуль из любого каталога, вам нужно установить его глобально, используя npm install -g.

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

Обновление (3/2016):

Я получил много ошибок за мой ответ, в частности, за то, что я проверяю пакеты, от которых зависит мой код. Несколько дней назад кто-то не опубликовал все свои пакеты (https://medium.com/@azerbike/i-ve-just-liberated-my-modules-9045c06be67c#.kq9s64clp), что сломало React, Babel и почти все остальное. Надеюсь, теперь ясно, что если у вас есть производственный код, вы не можете полагаться на фактическое поддержание NPM ваши зависимости для вас.

401 голосов
/ 25 мая 2015

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

rm -rf node_modules
npm install
77 голосов
/ 17 июня 2015
npm install --save module_name

Например, если ошибка:

{[Ошибка: не удается найти модуль '/root/.npm/form-data'] код: 'MODULE_NOT_FOUND'}

, затем вы можете решить эту проблему, выполнив команду npm install --save form-data.

17 голосов
/ 06 августа 2015

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

Что-то пошло не так при первой проверке npm, поэтому лучший выбор - удалить файл и перезапустить установку npm.

16 голосов
/ 03 октября 2017

Для пользователей TypeScript, если вы импортируете встроенный модуль Node (например, http, path или url) и получаете сообщение об ошибке, например "Cannot find module "x", ошибка может быть исправлена ​​с помощью работает

npm install @types/node --save-dev

Команда импортирует определения NodeJS TypeScript в ваш проект, что позволяет вам использовать встроенные модули Node.

8 голосов
/ 10 июня 2016

Если вы используете nvm, убедитесь, что существующие модули_узлов, которые связаны с другими библиотеками, скомпилированы для правильной версии Node.js.

У меня была такая же ошибка.Причина была в следующем: мы используем nvm, так как на сервере мы запускаем два приложения, одно требует Node.js 5.6, потому что он использует node-gd (который пока не работает на Node.js 6), другое требуетNode.js 6. Node.js 6 - это установка apt-get .

Также мы используем инструмент pm2 для развертывания.

Итак, настройка по умолчанию такова, чтоПроцесс pm2 запускается, когда nvm не работает, поэтому он использует установку apt-get Node.js (версия 6).Итак, основной демон pm2 начинается с Node.js 6. Если я запускаю приложения в режиме fork, они запускаются в отдельных процессах, и настройки nvm действуют.Когда я запускаю приложения в режиме кластера - они наследуют среду, отличную от nvm.

Поэтому, когда я пытался переключиться в режим кластера, приложение не запускалось из-за сбоя привязок, скомпилированных для 5.6, с этим сообщением.

Я исправил это, перезапустив pm2, когда настройки nvm действуют.Также должны быть исправлены сценарии запуска.

6 голосов
/ 06 июля 2016

Удалите корневую папку node_module из своего проекта (например: myApp). Перейдите в папку myApp и введите команду ниже с терминала

>myApp>npm install

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

5 голосов
/ 21 августа 2017

Я столкнулся с той же проблемой, когда кто-то еще в команде обновил package.json в SVN. Простое удаление каталога node_modules не помогло. Как я решил проблему:

rm -rf node_modules
rm package.json
rm package-lock.json
svn up
npm install
ng build --env=prod

Надеюсь, это кому-нибудь поможет!

4 голосов
/ 06 сентября 2017

Укажите путь к папке рестлера, которая будет внутри папки node_modules, например: var rest = require ('./ node_modules / restler');

Это сработало для меня.

4 голосов
/ 06 февраля 2018

Проверьте, правильно ли установлена ​​переменная окружения NODE_PATH и указывает ли она на путь node_modules. nodejs использует эту переменную для поиска библиотек

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...