Подтвердить что ты не робот

Установить node.js пути модуля REPL

Я не могу понять, как добавить пути к моей установке 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 сосуществовать!

4b9b3361

Ответ 1

Хорошо, я понял. Объединив информацию из 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.

Ответ 2

Черт, я неправильно понял. Извините.

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

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

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

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

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

Лучшей практикой является использование локальной установки.

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

Ответ 3

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

npm install --global PACKAGE_NAME

В моем случае я хотел установить jslint в качестве инструмента командной строки. Поэтому я побежал

npm install --global jslint

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

/usr/local/lib/node_modules/

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

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

npm help install

npm help global

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

Ответ 4

В ответ на это: fooobar.com/info/302228/...

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

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

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

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

node_global() {
  NODE_PATH=$(npm root -g) node "[email protected]"
}

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