NPM global install "не может найти модуль"
Я написал модуль, который я опубликовал для npm минуту назад (https://npmjs.org/package/wisp)
Поэтому он прекрасно устанавливает из командной строки:
$ npm i -g wisp
Однако, когда я запускаю его из командной строки, я все время получаю сообщение об ошибке, что оптимист не установлен:
$ wisp
Error: Cannot find module 'optimist'
at Function.Module._resolveFilename (module.js:338:15)
at Function.Module._load (module.js:280:25)
at Module.require (module.js:362:17)
at require (module.js:378:17)
at Object.<anonymous> (/usr/local/lib/node_modules/wisp/wisp:12:10)
at Object.<anonymous> (/usr/local/lib/node_modules/wisp/wisp:96:4)
at Module._compile (module.js:449:26)
at Object.exports.run (/usr/local/lib/node_modules/coffee-script/lib/coffee-script/coffee-script.js:68:25)
at compileScript (/usr/local/lib/node_modules/coffee-script/lib/coffee-script/command.js:135:29)
at fs.stat.notSources.(anonymous function) (/usr/local/lib/node_modules/coffee-script/lib/coffee-script/command.js:110:18)
Однако я указал в package.json как зависимость:
{
"name": "wisp",
"author": "Brendan Scarvell <[email protected]>",
"version": "0.1.0",
"description": "Global nodejs file server",
"dependencies": {
"optimist": "~0.3.4"
},
"repository": "git://github.com/tehlulz/wisp",
"bin": {
"wisp" : "./wisp"
}
}
Кто-нибудь знает, что делать, чтобы запустить это? Я знаю, что это связано с частью bin, добавляющей исполняемый файл bin, а node_modules в этом каталоге пустым. Не знаю, как это разрешить.
Ответы
Ответ 1
Для всех, кто работает с этим, у меня была эта проблема из-за установки npm
в местоположение, которое не было на моем NODE_PATH
.
[[email protected] ~]# which npm
/opt/bin/npm
[[email protected] ~]# which node
/opt/bin/node
[[email protected] ~]# echo $NODE_PATH
Мой NODE_PATH был пуст, а запуск npm install --global --verbose promised-io
показал, что он был установлен в /opt/lib/node_modules/promised-io
:
[[email protected] ~]# npm install --global --verbose promised-io
npm info it worked if it ends with ok
npm verb cli [ '/opt/bin/node',
npm verb cli '/opt/bin/npm',
npm verb cli 'install',
npm verb cli '--global',
npm verb cli '--verbose',
npm verb cli 'promised-io' ]
npm info using [email protected]
npm info using [email protected]
[cut]
npm info build /opt/lib/node_modules/promised-io
npm verb from cache /opt/lib/node_modules/promised-io/package.json
npm verb linkStuff [ true, '/opt/lib/node_modules', true, '/opt/lib/node_modules' ]
[cut]
Мой script завершается с ошибкой require('promised-io/promise')
:
[[email protected] project]$ node buildscripts/stringsmerge.js
module.js:340
throw err;
^
Error: Cannot find module 'promised-io/promise'
at Function.Module._resolveFilename (module.js:338:15)
Я, вероятно, установил node и npm из источника с помощью configure --prefix=/opt
. Я не знаю, почему это сделало их неспособными найти установленные модули. Исправить пока что нужно указать NODE_PATH в правом каталоге:
export NODE_PATH=/opt/lib/node_modules
Мой require('promised-io/promise')
теперь преуспевает.
Ответ 2
добавьте это в начало прога (mac):
module.paths.push('/usr/local/lib/node_modules');
Ответ 3
По умолчанию node не ищет внутри /usr/local/lib/node _module для загрузки глобальных модулей.
Обратитесь к загрузке модуля, описанной в http://nodejs.org/api/modules.html#modules_loading_from_the_global_folders
Так что либо вы должны
1) добавьте /usr/local/lib/node _module в NODE_PATH и экспортируйте его
или
2) скопируйте установленные модули node в /usr/local/lib/ node.
(Как поясняется в ссылке для загрузки модуля node будет искать по этому пути и будет работать)
Ответ 4
Для некоторых (как я), которые ничего больше не работали, попробуйте следующее:
brew cleanup
brew link node
brew uninstall node
brew install node
Надеюсь, это поможет кому-то:)
Ответ 5
Я получил ошибку модуля "оптимист", и я просто "установил npm", чтобы решить эту проблему. прошло мимо этой ошибки.
https://github.com/mbloch/mapshaper/issues/12
Ответ 6
У меня была эта проблема для request-promise
. В моем случае замена:
npm install request-promise --global
с
npm install request-promise --cli
работал (источник)
Также попробуйте установить переменную окружения
NODE_PATH=%AppData%\npm\node_modules
Ответ 7
$vim/etc/profile.d/nodejs.sh
NODE_PATH=/usr/lib/nodejs:/usr/lib/node_modules:/usr/share/javascript
export NODE_PATH="$NODE_PATH"
Ответ 8
Имела ту же проблему на одном из тестовых серверов под управлением Ubuntu
под root
. Затем создайте нового пользователя с помощью useradd -m myuser
и установите все (nvm
, node
, packages) как myuser
. Теперь он отлично работает.
Ответ 9
В Windows, если вы просто сделали чистую установку, и вы получите это, вам нужно сбить свой кеш-нпп в папке\AppData\Roaming
Ответ 10
В Windows, из Nodejs не может найти установленный модуль в Windows? для меня работала npm-ссылка, как в
npm link wisp
Ответ 11
В моем случае оба node
и npm
были в одном пути (/usr/bin
). NODE_PATH
был пустым, поэтому npm
помещал глобальные модули в /usr/lib/node_modules
, где require(...)
успешно их находил.
Единственным исключением был модуль npm
, который поставлялся с пакетом nodejs. Поскольку я использую 64-битную систему, она была помещена в /usr/lib64/node_modules
. Здесь не требуется (...) поиск в случае пустых NODE_PATH
и node, начинающихся с /usr/bin
. Поэтому у меня было два варианта:
- link
/usr/lib64/node_modules/npm
to /usr/lib/node_modules/npm
- переместите модули с
/usr/lib/node_modules/*
на /usr/lib64/node_modules/
и установите NODE_PATH=/usr/lib64/node_modules
Оба работали. Я использую OpenSUSE 42.1 и пакет nodejs из репозитория обновлений. Версия 4.4.5.
Ответ 12
Я сделал это простым способом...
- Отключить node с панели управления [Windows 7]
- Установить node снова
- Установите транспортир
npm install --global --verbose protractor
Обновите менеджер драйверов веб-страниц.
отлично работает для меня.
Надеюсь, это поможет вам....
Ответ 13
Я получил эту ошибку Error: Cannot find module 'number-is-nan'
, тогда как модуль действительно существует. Это произошло из-за плохой/неполной установки Node.js.
Для Windows, как подсказывают другие ответы, вам нужна чистая установка узла :
- Удалить Node.js
- Удалите две папки
npm
и npm_cache
в C:\Users\user\AppData\Roaming
- Перезапустите Windows и установите Node.js
- Запустите
npm init
или (npm init --yes
для конфигурации по умолчанию)
- Установите переменную среды Windows для
NODE_PATH
. Этот путь - то, где ваши пакеты установлены. Это наверное что-то вроде NODE_PATH = C:\Users\user\node_modules or C:\Users\user\AppData\Roaming\npm\node_modules
- Запустите новую консоль cmd, и
npm
должен нормально работать
Примечание:
Попробуйте последние пункты перед переустановкой Node.js, это может сэкономить вам время и избежать переустановки всех ваших пакетов.
Ответ 14
Для Mac User It лучше всего использовать ручную установку:
Чтобы минимизировать вероятность ошибок разрешений, вы можете настроить npm для используйте другой каталог. В этом примере это будет скрытый каталог в вашей домашней папке.
Перед началом работы создайте резервную копию компьютера.
Создайте каталог для глобальных установок:
mkdir ~/.npm-global
Настройте npm для использования нового пути к каталогу:
Префикс конфигурации npm '~/.npm -g lobal'
Откройте или создайте файл ~/.profile и добавьте следующую строку:
export PATH=~/.npm-global/bin:$PATH
Вернитесь в командную строку и обновите системные переменные:
source ~/.profile
Тест: загрузите пакет глобально без использования sudo.
npm install -g jshint
Вместо шагов 2-4 вы можете использовать соответствующую переменную ENV (например, если вы не хотите изменять ~/.profile):
NPM_CONFIG_PREFIX=~/.npm-global
Ссылка: https://docs.npmjs.com/getting-started/fixing-npm-permissions
Ответ 15
У меня была та же ошибка, что и у OP, но, пробираясь в журналы, я мог видеть sh: node: command not found
.
Оказывается, что программа /usr/bin/ node (символическая ссылка) больше не установлена с помощью apt install nodejs
. После символьной ссылки /usr/bin/node' to
nodejs ,
npm install -g @angular/cli` преуспел.
Правильный способ установить это на debian - apt install nodejs-legacy
.
Ответ 16
Мне пришлось добавить C:\Users\{Имя пользователя}\AppData\Roaming\npm в мои переменные env, а затем я мог установить вещи.
Ответ 17
Я только что столкнулся с этой проблемой модуля axios
.
Тогда я попробовал это: запустите rm -rf node_modules
и yarn
.
И это работает.