Путь к глобальным модулям node.js недоступен в сценариях узлов

Я развертываю сайт 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

Итак, как я могу заставить все мои сценарии использовать только глобально установленные пакеты по умолчанию?

Вы пытались добавить export к своим определениям PATH/NODE_PATH в .bashrc, т.е. export PATH = "/usr/local/bin/npm-global/bin:$HOME/bin:$HOME/.local/b‌​in:$PATH"?

DylanSp 15.12.2020 19:18
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
1
725
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы можете использовать общий 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.

Другие вопросы по теме