установить путь к модулю REPL для node.js - PullRequest
19 голосов
/ 05 мая 2011

Я не могу понять, как добавить пути к моей установке Node.js (v.0.4.7 в Mac OS X).Я установил npm, и он устанавливается глобально на /usr/local/lib/node_modules.Однако, когда я установил npm, он не уведомил Node о том, куда он решил поместить глобальные модули (должен ли он быть?).Теперь, когда я использую Node в режиме командной строки, я не могу просто require() мои глобально установленные модули.Итак, мне интересно, есть ли какой-нибудь файл конфигурации Node или переменная среды, где я могу добавить свой глобальный путь установки модуля npm?

Я знаю, что могу просто добавить его в массив require.paths, когда нахожусь в командной строке Node, но я хочу добавить эту глобальную папку модуля раз и навсегда, чтобы Node всегда выполнял поисккаталог для модулей, когда я require() их из командной строки.Заранее благодарим за любую помощь и советы по созданию сосуществующих npm и Node!

Ответы [ 4 ]

18 голосов
/ 08 мая 2011

ОК, я понял.Объединяя информацию из http://nodejs.org/docs/v0.4.7/api/modules.html#file_Modules и https://github.com/isaacs/npm/blob/master/doc/faq.md#readme, становится ясно, что Node проверяет переменную среды NODE_PATH при проверке модулей.Чтобы установить это, я сделал следующее:

echo 'export NODE_PATH="'$(npm root -g)'"' >> ~/.bashrc

Это устанавливает NODE_PATH в глобальную папку установки npm.

4 голосов
/ 06 мая 2011

Блин, я не так понял.Извините за это.

Вернувшись в тему, вы можете поместить эти две строки в set-repl-paths.js

require.paths.unshift('/usr/lib/node_modules');
require("repl").start();

Затем, выполнив node set-repl-paths.js, вы получите ответ с уже заданными путями.Вы можете написать простой bash-скрипт или установить псевдоним оболочки, чтобы вы могли просто набрать node-repl или что-то подобное.

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

Если вы действительно хотите глобальную установку для модуля foo, то в папке вашего модуля введите npm link foo.Теперь вы можете require("foo") в вашем модуле.

Рекомендуется использовать локальную установку.

См. npm 1.0: Globalvs Локальная установка в блоге nodejs.

2 голосов
/ 18 июня 2011

Чтобы установить пакет глобально (обычно используется в командной строке)

npm install --global PACKAGE_NAME

В моем случае я хотел установить jslint в качестве инструмента командной строки.Итак, я запустил

npm install --global jslint

Это установит пакет в

/usr/local/lib/node_modules/

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

Для получения дополнительной информации посетите страницы справки.

npm help install

npm help global

Я также нашел это в npm FAQ

1 голос
/ 06 января 2017

В ответ на это: https://stackoverflow.com/a/5923898/7381355

Вы можете добавить это в свой .bashrc, чтобы устанавливать NODE_PATH только при запуске repl, поскольку требование глобальных модулей является антишаблоном.

node() {
  if (( $# == 0 )); then
    NODE_PATH=$(npm root -g) command node
  else
    command node "$@"
  fi
}

Он устанавливает NODE_PATH, когда никакие аргументы не передаются узлу. Так что это не будет работать с чем-то вроде node -i. Вы должны добавить дополнительную проверку аргументов, чтобы охватить все случаи, когда запускается repl.

Это сделало бы, чтобы repl всегда устанавливал NODE_PATH. Если вы хотите иметь возможность выбрать, запускать ли repl или скрипт с глобальными модулями или нет, вы можете вместо этого добавить это в ваш .bashrc.

node_global() {
  NODE_PATH=$(npm root -g) node "$@"
}

Тогда просто запустите node_global. Я пошел со вторым вариантом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...