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

Ответ 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 для используйте другой каталог. В этом примере это будет скрытый каталог в вашей домашней папке.

  1. Перед началом работы создайте резервную копию компьютера.

  2. Создайте каталог для глобальных установок:

    mkdir ~/.npm-global

  3. Настройте npm для использования нового пути к каталогу:

    Префикс конфигурации npm '~/.npm -g lobal'

  4. Откройте или создайте файл ~/.profile и добавьте следующую строку:

    export PATH=~/.npm-global/bin:$PATH

  5. Вернитесь в командную строку и обновите системные переменные:

    source ~/.profile

  6. Тест: загрузите пакет глобально без использования 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. И это работает.