Как устранить ошибку "Не удается найти модуль", используя Node.js?

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

> npm install ../faye

Это похоже на трюк:

> npm list
/home/dave/src/server
└─┬ [email protected]
  ├── [email protected]
  ├── [email protected]
  └── [email protected]

Но 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)

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

Ответ 1

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

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

Обновление (8/2019):

В настоящее время вы можете использовать файл package-lock.json, который автоматически генерируется, когда npm изменяет ваш каталог node_modules. Поэтому вы можете не проверять пакеты, потому что package-lock.json отслеживает точные версии ваших узлов_модулей, которые вы сейчас используете. Чтобы установить пакеты из package-lock.json вместо package.json, используйте команду npm ci.

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

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

Ответ 2

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

rm -rf node_modules
npm install

Ответ 3

npm install --save module_name

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

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

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

Ответ 4

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

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

Ответ 5

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

npm install @types/node --save-dev

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

Ответ 6

Если вы используете 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 действуют. Также скрипты запуска должны быть исправлены.

Ответ 7

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

>myApp>npm install

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

Ответ 8

Вчера я испытал эту ошибку. Потребовалось некоторое время, чтобы понять, что запись main в package.json указывала на файл, который я переместил. Как только я обновил, что ошибка исчезла, и пакет работал.

Ответ 9

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

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

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

Ответ 10

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

Ответ 11

Эта ошибка может возникнуть, если вы используете require модуль с отсутствующим или неправильным полем main в своем пакете. json. Хотя сам модуль установлен, npm/node должен использовать один .js файл в качестве точки входа в ваш модуль. Если поля main не существует, по умолчанию он ищет index.js в папке вашего модуля. Если ваш основной файл модуля не называется index.js, он не сможет require его.

Обнаружен при преобразовании модуля на основе browserify в модуль CommonJS require -able; browserify не интересовался отсутствующим полем main, поэтому ошибка осталась незамеченной.

Ответ 12

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

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

Ответ 13

PRO TIP:

Эта ошибка произошла со мной, во время борьбы с усталостью и легкой болезнью, потому что я набрал node blah вместо npm blah.

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

Ответ 14

Я могу добавить еще одно место для проверки; пакет, который я пытался использовать, был еще одним из моих собственных пакетов, которые я опубликовал для частного репозитория NPM. Я забыл правильно настроить свойство "main" в package.json. Итак, пакет находился в папке node_modules пакета-потребителя, но я получал "не могу найти модуль". Мне потребовалось несколько минут, чтобы понять мою ошибку.: - (

Ответ 15

В моем случае у меня было UNMET PEER DEPENDENCY [email protected]^3.0.0, вызвавшее это сообщение об ошибке, все их увидели и снова установили отсутствующие модули, используя -save

npm install redux --save

Ответ 16

Удаление узла /npm, а затем переустановка стабильной (не самой последней) версии работало на меня.

sudo rm -rf /usr/local/{lib/node{,/.npm,_modules},bin,share/man}/{npm*,node*,man1/node*}

https://nodejs.org/en/download/

Ответ 17

Я пытался опубликовать свой собственный пакет, а затем включить его в другой проект. У меня была эта проблема из-за того, как я построил первый модуль. Я использую экспорт ES2015 для создания модуля, например, скажем, модуль выглядит следующим образом:

export default function(who = 'world'){
    return `Hello ${who}`;
}

После компиляции с Вавилоном и до него было опубликовано:

'use strict';

Object.defineProperty(exports, "__esModule", {
    value: true
});

exports.default = function () {
    var who = arguments.length <= 0 || arguments[0] === undefined ? 'world' : arguments[0];


    return 'Hello ' + who;
};

Итак, после npm install module-name в другом проекте (ни один ES2015) мне пришлось делать

var hello = require('module-name').default;

Фактически полученный пакет импортирован.

Надеюсь, что это поможет!

Ответ 18

Обнаружена эта проблема при использовании webpack с webpack-dev-middleware.

Включил одиночный файл в папку .

Наблюдатель, похоже, не видел новую папку, и модуль теперь отсутствовал.

Исправлено перезапуском процесса.

Ответ 19

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

Я также получал ошибку Can not Find Module, но, как ни странно, все отлично работало в моей локальной (Mac) среде Node.js. Эта проблема появилась только при развертывании кода на нашем Linux-сервере.

Ну... оказалось, что это опечатка, которая (по-видимому) была установлена ​​на Mac на основе Node.js.

Включение выглядит следующим образом:

var S3Uploader = require('./S3Uploader.class');

Но фактический файл назывался "s3Uploader.class.js"

Обратите внимание на разницу в корпусе "s" и "S" между кодом и именем файла.

Итак - в том случае, что ни одно из других решений здесь не решает вашу проблему, проверьте, чтобы вы не ошиблись в символах вашего включенного имени файла!:)

и DUH!

Ответ 20

Может быть, как и я, вы установили "механизм просмотра" в экспрессе на механизм, который не существует, или пытались использовать незарегистрированный шаблонизатор. Убедитесь, что вы используете: app.engine('engine name',engine) app.set('view engine','engine name')

Ответ 21

Пожалуйста, установите новый CLI v3 (npm install -g ionic @latest).

Если эта проблема все еще проблема в CLI v3. Спасибо!

Ответ 22

Если пакет успешно установлен, перейдите в папку node_modules, затем проверьте файл и путь. Затем импортируйте. Надеюсь это поможет.

Ответ 23

Каждый раз, когда изменяется package-lock.json, npm ci должен запускаться перед запуском кода. Предполагая, что код начинается со скрипта start npm, npm ci может автоматически запускаться с помощью следующего скрипта prestart npm

{
  "scripts": {
    "prestart": "npx @olegjs/on-change --file package-lock.json npm ci"
  }
}

Ответ 24

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

(Psst! Я не уверен, что я успешно помог в решении вышеуказанной ошибки, или если я нарушил какое-то правило или формат ответа, но я столкнулся с вышеуказанной ошибкой и некоторыми другими, и это потребовало много времени для того, чтобы найти правильные решения для этих ошибок. Я пишу полное решение, потому что, если кто-то еще столкнется с этими ошибками, то он, надеюсь, получит решение здесь.)

Итак, добавляя и разрабатывая ответ PrashanthiDevi, а также добавляя мой личный опыт, вот он:

Я новичок во всей части тестирования e2e и unit. Я начал изучать эту часть из Protractor. Теперь у меня уже были файлы, в которых были написаны тесты, но мне пришлось запускать тесты.

Я уже установил все необходимые программные средства и инструменты, но когда я изначально запускал код для запуска тестов, gulp itest, я получил этот "Не могу найти модуль" Error. Пройдя много разных вопросов по SO, я нашел один ответ, который, как я думал, может помочь найти решение.

Человек предложил запустить команду npm install в моей папке проекта.

Для этого причина заключалась в обновлении папки node -modules внутри нашей папки проекта со всеми необходимыми и необходимыми файлами и зависимостями. p >

(Нижняя часть может быть неактуальна с этим вопросом, но может быть полезна, если кто-то столкнется с той же ситуацией, с которой я столкнулся.)

Вышеуказанный шаг, конечно, решил мою предыдущую ошибку, но бросил новую! На этот раз ошибка Could not find chromedriver at '..\node_modules\protractor\selenium\chromedriver'.

Однако решение этой ошибки было для меня довольно глупым (и смешным). У меня уже был файл хромированной записи в папке selenium. Но оказывается, что ошибка выше, потому что мои файлы хромированных рекордов находились внутри селеновой папки и не внутри chromedriver папка. Итак, создав папку хромированная рекордер и скопировав файлы хромированных файлов, я решил свою проблему!

Кроме того, для ошибки: с учетом ожидания сервера WebDriver вы можете добавить эту строку кода в файл conf.js внутри exports.config{}:

seleniumAddress: 'http://localhost:8080/'

Надеюсь, это поможет!

Ответ 25

У меня есть простое решение для решения этой проблемы.

Просто удалите C:\Users\UserName\AppData\Roaming\npm\

а затем установите node.

Теперь ваша проблема будет решена.

Ответ 26

Выполните только следующую команду:

npm install

Он установит все необходимые модули в папку node_modules.

Ответ 27

Измените каталог и укажите текущую папку проекта, а затем "npm install". ,

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