Как устранить ошибку "Не удается найти модуль", используя 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". ,
Это установит все зависимости и модули в папку вашего проекта.