Ошибка: не удается найти модуль 'levelup' в Function.Module._resolveFilename [duplicate]

git branch -D <name-of-branch>
git branch -D -r origin/<name-of-branch>
git push origin :<name-of-branch>
106
задан alexandernst 26 March 2013 в 13:49
поделиться

6 ответов

Согласно документации , Node.js по умолчанию будет искать в следующих местах:

  1. $HOME/.node_modules (глобальный) Примечание: $HOME является пользовательским home.
  2. $HOME/.node_libraries (глобальный)
  3. $PREFIX/lib/node (глобальный) Примечание: $PREFIX настроен на Node.js node_prefix. Чтобы проверить текущее значение node_prefix, запустите:
    node -p process.config.variables.node_prefix
    
    Примечание: префикс соответствует параметру --prefix во время сборки и соответствует process.execPath. Не путать со значением из команды npm config get prefix. source
  4. Текущая папка node_modules. (local)
  5. Путь, указанный в переменной среды NODE_PATH. Примечание: переменная среды NODE_PATH установлена ​​в список абсолютных путей с разделителем двоеточия.

Если данный модуль не может быть найден, это означает, что он отсутствует в одном из выше.

Местоположение глобальной корневой папки, где установлены модули, может быть напечатано: npm root -g (по умолчанию путь вычисляется во время выполнения, если не переопределен в файле npmrc ).

Решение

Вы можете попробовать следующие обходные пути:

  • Укажите местоположение глобального модуля в переменной среды NODE_PATH. Например.
    echo 'require("forever")' | NODE_PATH="$(npm root -g):$NODE_PATH" node
    
    Чтобы проверить и распечатать значение NODE_PATH, запустите:
    echo 'console.log(process.env.NODE_PATH); require("forever")' | NODE_PATH="$(npm root -g):$NODE_PATH" node 
    
  • Для получения более постоянного решения свяжите свою глобальную папку пользователя $HOME/.node_modules, чтобы указать на корневую папку, выполнив эту команду :
    ln -vs "$(npm root -g)" "$HOME"/.node_modules
    
    Затем повторите проверку с помощью команды echo 'require("forever")' | node.
  • Временно измените текущую папку на то, где расширение было установлено глобально, перед вызовом скрипта. Например.
    npm install -g forever
    cd "$(npm root -g)"
    echo 'require("forever")' | node
    cd -
    
  • Настроить назначение глобальной установки в файле npm userconfig (см. npm help 5 npmrc) или параметром userconfig (--prefix). Чтобы отобразить текущую конфигурацию, запустите: npm config list. Чтобы отредактировать текущую конфигурацию, запустите: npm config edit.
  • Задайте полный путь расположения узлов узла при вызове require(). Например.
    require("/path/to/sub/module")
    
  • Установите пакет в пользовательское местоположение, например.
    npm install forever -g --prefix "$HOME"/.node_modules
    
    Однако установка будет проходить под ~/.node_modules/lib/node_modules/, поэтому местоположение должно быть добавлено. См. npm локальный пакет установки в пользовательское местоположение
  • Создайте символическую ссылку в текущей папке из местоположения глобального пакета. Например.
    npm link forever
    
160
ответ дан kenorb 24 August 2018 в 08:34
поделиться

Я знаю, что это старый вопрос, но я столкнулся с этим при попытке выполнить некоторую проверку версий с помощью semver в скрипте preinstall в package.json. Поскольку я знал, что не могу зависеть от каких-либо локальных модулей, я использовал это, чтобы потребовать semver из глобальной папки node_modules (поскольку npm зависит от этого, я знаю, что он есть):

function requireGlobal(packageName) {
  var childProcess = require('child_process');
  var path = require('path');
  var fs = require('fs');

  var globalNodeModules = childProcess.execSync('npm root -g').toString().trim();
  var packageDir = path.join(globalNodeModules, packageName);
  if (!fs.existsSync(packageDir))
    packageDir = path.join(globalNodeModules, 'npm/node_modules', packageName); //find package required by old npm

  if (!fs.existsSync(packageDir))
    throw new Error('Cannot find global module \'' + packageName + '\'');

  var packageMeta = JSON.parse(fs.readFileSync(path.join(packageDir, 'package.json')).toString());
  var main = path.join(packageDir, packageMeta.main);

  return require(main);
}

Мне нравится этот подход, потому что для этого не требуется установка каких-либо специальных модулей.

Я не пошел с решением NODE_PATH, как это предлагали другие, поскольку я хотел чтобы это работало на чьей-то машине, без необходимости требовать дополнительной настройки / настройки перед запуском npm install для моего проекта.

Как это закодировано, гарантируется только найти модули верхнего уровня (установлены используя npm install -g ...) или модули, требуемые npm (перечислены как dependencies здесь: https://github.com/npm/npm/blob/master/package.json ). Если вы используете более новую версию NPM, она может найти зависимости от других пакетов, установленных на глобальном уровне, так как теперь существует более плотная структура для папок node_modules.

Надеюсь, это кому-то полезно.

15
ответ дан Joe Skeen 24 August 2018 в 08:34
поделиться

Вы можете использовать пакет requireg для решения этой проблемы:

var forever = require('requireg')('forever')

выполнит трюк.

Кроме того, есть еще один модуль , global-npm , хотя и для использования только глобального npm, вы можете посмотреть короткий код и посмотреть, как работает эта техника.

13
ответ дан JP Richardson 24 August 2018 в 08:34
поделиться

Извинения за некромантию, но я могу указать жестко закодированные пути к глобально установленным модулям:

var pg = require("/usr/local/lib/node_modules/pg");

Это не идеально, но учитывая, что Unity3d пытается «скомпилировать» весь javascript, который включен в каталог проекта. Я действительно не могу установить какие-либо пакеты.

21
ответ дан jpaugh 24 August 2018 в 08:34
поделиться

Вы можете поместить эту строку в свой файл .profile:

export NODE_PATH = "$ (префикс префикса npm config) / lib / node_modules"

Это сделает node использование глобального пути.

1
ответ дан Luis Paulo 24 August 2018 в 08:34
поделиться

После установки пакета по всему миру вам нужно связать локальный проект с глобальным пакетом

npm install express -g
cd ~/mynodeproject/
npm link express  

. Здесь

78
ответ дан Sandy Gifford 24 August 2018 в 08:34
поделиться
Другие вопросы по тегам:

Похожие вопросы: