Я развертываю сайт WordPress, на котором есть куча настраиваемых mu-плагинов и настраиваемая тема, и все они имеют процессы сборки gulp и все используют одни и те же пакеты npm. Из-за этого я хочу установить все пакеты npm глобально, чтобы я мог запустить скрипт узла корневого уровня, который, в свою очередь, запустит каждый из файлов gulp (темы и плагины) и создаст все. Просто используйте узел child_process.execSync()
для запуска файлов sub gulp.
К сожалению, мои скрипты не могут найти глобально устанавливаемые пакеты npm. мой скрипт .bashrc
определяет следующее:
PATH = "/usr/local/bin/npm-global/bin:$HOME/bin:$HOME/.local/bin:$PATH"
NODE_PATH = "/usr/local/bin/npm-global/lib/node_modules:$NODE_PATH"
NPM_CONFIG_PREFIX=/usr/local/bin/npm-global/
и если я запускаю префикс npg -g и корень npm -g, я получаю следующее:
$ npm -g prefix
/usr/local/bin/npm-global
$ npm -g root
/usr/local/bin/npm-global/lib/node_modules
однако, если я запускаю свой скрипт узла, я получаю такие ошибки, как Error: Cannot find module 'glob'
Я МОГУ заставить мои сценарии работать, если я добавлю что-то вроде
module.paths.push('/usr/local/bin/npm-global/lib/node_modules')
в мой основной скрипт, но мне также пришлось бы добавлять это в каждый файл gulp. Я также должен отметить, что если я запускаю что-то вроде child_process.execSync('npm -g root')
, он выводит /usr/local/bin/npm-global/lib/node_modules
Итак, как я могу заставить все мои сценарии использовать только глобально установленные пакеты по умолчанию?
Вы можете использовать общий node_modules
каталог для всех ваших проектов в системе, установив переменную среды NODE_PATH. Ваш .bashrc
устанавливает эту переменную, но вы можете/должны убедиться, что она установлена в самом скрипте. (Может быть, вы запускаете его как другой пользователь или в другой подоболочке? Может быть, вы используете macOS и недавно переключились на zsh и загружаете что-то из другого rc? Может быть, в начале строки отсутствует export
определяет NODE_PATH
?)
Самый прямой способ устранения неполадок — проверить скрипт на значение process.env.NODE_PATH
. Если он пуст или не установлен, это ваша проблема.
Вы также можете вызывать свои сценарии с помощью определенного NODE_PATH
, например: NODE_PATH=/the/path/you/want node script.js
.
Вы пытались добавить
export
к своим определениям PATH/NODE_PATH в .bashrc, т.е.export PATH = "/usr/local/bin/npm-global/bin:$HOME/bin:$HOME/.local/bin:$PATH"
?