Установить 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 сосуществовать!
Ответы
Ответ 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. Я пошел со вторым вариантом.