Как установить пользовательское расположение для локальной установки пакета npm?

Можно ли указать целевое назначение пакета для npm install, либо через флаг команды, либо переменную среды?

По умолчанию локальная установка npm заканчивается в node_modules в текущем каталоге, но я хочу, чтобы она была установлена ​​в node_modules в другом каталоге, например vendor/node_modules. Как я могу это сделать?

Ответ 1

TL; DR

Вы можете сделать это, используя флаг --prefix и флаг --global *.

[email protected]:~/foo $ npm install bower -g --prefix ./vendor/node_modules
[email protected] /Users/pje/foo/vendor/node_modules/bower

* Несмотря на то, что это "глобальная" установка, установленные бины не будут доступны через командную строку, если только ~/foo/vendor/node_modules не существует в PATH.

TL, R

Каждый настраиваемый атрибут npm может быть установлен в любом из шести разных мест. В порядке приоритета:

  • Флаги командной строки: --prefix ./vendor/node_modules
  • Переменные среды: NPM_CONFIG_PREFIX=./vendor/node_modules
  • Файл конфигурации пользователя: $HOME/.npmrc или userconfig param
  • Глобальный файл конфигурации: $PREFIX/etc/npmrc или userconfig param
  • Встроенный файл конфигурации: path/to/npm/itself/npmrc
  • Конфигурация по умолчанию: node_modules/npmconf/config-defs.js

По умолчанию локально установленные пакеты входят в ./node_modules. глобальные входят в конфигурационную переменную prefix (/usr/local по умолчанию).

Вы можете запустить npm config list, чтобы увидеть свою текущую конфигурацию и npm config edit, чтобы изменить ее.

PS

В общем, документация npm действительно полезна. Раздел folders является хорошим структурным обзором npm, а раздел config отвечает на этот вопрос.

Ответ 2

Если вы хотите это в config, вы можете установить конфигурацию npm следующим образом:

npm config set prefix "$(pwd)/vendor/node_modules"

или

npm config set prefix "$HOME/vendor/node_modules"

Проверьте конфигурацию с помощью

npm config ls -l

Или как @pje говорит и использует флаг --prefix

Ответ 3

Для OSX вы можете перейти к своему пользователю $HOME (вероятно,/Users/yourname/), а если он еще не существует, создайте файл .npmrc (файл, который npm использует для настройки пользователя) и создайте каталог для ваших пакетов npm, которые будут установлены (например,/Users/yourname/npm). В этом файле .npmrc установите "префикс" в ваш новый каталог npm, в котором будет установлено "глобально", пакеты npm будут установлены; эти "глобальные" пакеты, очевидно, будут доступны только для вашей учетной записи пользователя.

В .npmrc:

prefix=${HOME}/npm

Затем запустите эту команду из командной строки:

npm config ls -l

Он должен давать вывод как в вашей локальной конфигурации, так и в глобальной конфигурации npm, и вы должны увидеть, что ваша локальная конфигурация префикса отражена, вероятно, около верхней части длинного списка вывода.

Для обеспечения безопасности я рекомендую этот подход для настройки поведения npm вашей учетной записи пользователя в соответствии с вашими папками /usr/local, которые я видел в другом месте.

Ответ 4

В Windows 7, например, можно использовать следующий набор команд/операций.

Создайте переменную личной среды, двойные обратные слэши обязательны:

  • Имя переменной: %NPM_HOME%
  • Значение переменной: C:\\SomeFolder\\SubFolder\\

Теперь установите значения конфигурации в новые папки (примеры имен файлов):

  • Установите папку npm

npm config set prefix "%NPM_HOME%\\npm"

  • Установите папку npm-cache

npm config set cache "%NPM_HOME%\\npm-cache"

  • Установите временную папку npm

npm config set tmp "%NPM_HOME%\\temp"

При желании вы можете очистить содержимое исходных папок до, если конфигурация изменена.

  • Удалить npm-cache npm cache clear

  • Список модулей npm npm -g ls

  • Удалить модули npm npm -g rm name_of_package1 name_of_package2

Ответ 5

После поиска этого я хочу, чтобы несколько проектов с общими зависимостями были DRYer, Ive нашел:

  • Установка локально - это путь Node для всего, что вы хотите использовать через require()
  • Установка в глобальном масштабе предназначена для двоичных файлов, которые вы хотите в своем пути, но не предназначена для чего-либо через require()
  • Использование префикса означает, что вам нужно добавить соответствующие пути bin и man к $PATH
  • npm link (информация) позволяет использовать локальную установку в качестве источника для глобальных переменных

→ придерживаться способа Node и установить локально

ссылка

Ответ 6

Я бы просто установил локально, а затем в вашем пакете. json, переместите его из раздела зависимостей в devDependencies. В зависимости от того, что вы используете для развертывания, оно не может быть развернуто (например, не для героку).

devDependencies": {
   "module": "0.1.0"
}