Установите NPM в домашнюю директорию с дистрибутивным узлом nodejs (Ubuntu)
Я хотел бы использовать дистрибутивы Node.js(или chris-lea ppa для более поздних версий), но установите NPM в мой домашний каталог,
Это может показаться разборчивым, но это довольно идиоматический способ для разработчиков polyglot/github для установки языковых сред выполнения/библиотек в Linux: дистрибутивные пакеты для среды выполнения, сторонние библиотеки в среде для каждого пользователя (см. virtualenv, RVM - RVM также будет строить Ruby для вас, если вы хотите). При необходимости я буду строить node локально, но это PITA, поскольку node становится случайным требованием к разработке для большого количества проектов.
Вторая ссылка кажется, что она может работать с дистрибутивными узлами nodejs, но кажется довольно отрывочной.
Обновить этот паст подводит итог второй ссылке выше, но не работает для меня (кажется, что npm игнорирует ~/. npmrc, по крайней мере во время установки).
Ответы
Ответ 1
NPM уже установит локальные пакеты в ваши проекты, но мне все равно нравится держать систему в стороне от файлов моей операционной системы. Вот как я предлагаю разделять пакеты Nodejs:
Установите Nodejs и NPM через PPA chris-lea. Затем я установил корневой пакет в моем homedir для хранения пакетов Node "global":
$ NPM_PACKAGES="$HOME/.npm-packages"
$ mkdir -p "$NPM_PACKAGES"
Установите NPM для использования этого каталога для его глобальных пакетов:
$ echo "prefix = $NPM_PACKAGES" >> ~/.npmrc
Настройте PATH и MANPATH, чтобы увидеть команды в префиксе $NPM_PACKAGES, добавив следующее к вашему .zshrc/.bashrc:
# NPM packages in homedir
NPM_PACKAGES="$HOME/.npm-packages"
# Tell our environment about user-installed node tools
PATH="$NPM_PACKAGES/bin:$PATH"
# Unset manpath so we can inherit from /etc/manpath via the `manpath` command
unset MANPATH # delete if you already modified MANPATH elsewhere in your configuration
MANPATH="$NPM_PACKAGES/share/man:$(manpath)"
# Tell Node about these packages
NODE_PATH="$NPM_PACKAGES/lib/node_modules:$NODE_PATH"
Теперь, когда вы выполняете npm install -g
, NPM будет устанавливать библиотеки в ~/.npm-packages/lib/node_modules
и связывать исполняемые инструменты в ~/.npm-packages/bin
, который находится в вашем PATH
.
Просто используйте npm install -g
, как обычно:
[[email protected]:~] $ npm install -g coffee-script
... (npm downloads stuff) ...
/home/justjake/.npm-packages/bin/coffee -> /home/justjake/.npm-packages/lib/node_modules/coffee-script/bin/coffee
/home/justjake/.npm-packages/bin/cake -> /home/justjake/.npm-packages/lib/node_modules/coffee-script/bin/cake
[email protected] /home/justjake/.npm-packages/lib/node_modules/coffee-script
[[email protected]:~] $ which coffee
/home/justjake/.npm-packages/bin/coffee
Ответ 2
Ответ Джейка был опубликован в 2012 году, и, хотя он полезен, он ссылается на Chris Lea Node.js PPA, которые больше не обновляются с марта 2015 года.
Вот шаги, которые я использую для установки Node.js и npm в моем домашнем каталоге:
Установите Node.js с nvm (не требуется sudo
):
curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.33.2/install.sh | bash
source ~/.bashrc
nvm install 7
npm install -g npm # update npm
Теперь вы можете install -g
без sudo
, и все идет в ~/.nvm/
Установить Node.js
-
Node.js v6 (текущий LTS по состоянию на май 2017 года):
curl -sL https://deb.nodesource.com/setup_4.x | sudo -E bash -
sudo apt-get install -y nodejs
-
Node.js v7:
curl -sL https://deb.nodesource.com/setup_7.x | sudo -E bash -
sudo apt-get install -y nodejs
Изменить каталог по умолчанию npm на локальный:
mkdir ~/.npm-global
npm config set prefix '~/.npm-global'
export PATH="$HOME/.npm-global/bin:$PATH" # ← put this line in .bashrc
source ~/.bashrc # if you only updated .bashrc
Альтернативно замените .npm-global
на каталог по вашему выбору.
Обновить npm и проверить, что он установлен в вашем каталоге $HOME
:
$ npm install npm -g
/home/<username>/.npm-global/bin/npm -> /home/<username>/.npm-global/lib/node_modules/npm/bin/npm-cli.js
/home/<username>/.npm-global/lib
└─┬ [email protected]
├─┬ [email protected]
│ └── [email protected]
├── [email protected]
└── [email protected]
Теперь вы можете install -g
без sudo
и не вмешиваться в системные файлы.
Ответ 3
Решение, размещенное Just Jake, замечательно. Однако из-за ошибки с npm > 1.4.10 он может работать не так, как ожидалось. (Смотрите this и this)
Пока ошибка решена, вы можете перейти на npm 1.4.10, выполнив следующие шаги:
- Прокомментируйте строку префикса в $HOME/.npmrc
- Выполнить
sudo npm install -g [email protected]
- Убедитесь, что установлена правильная версия npm (
npm --version
)
- Раскомментируйте строку префикса в $HOME/.npmrc
- Приступайте к установке глобальных пакетов в домашнюю папку!
Ответ 4
Поскольку python делает отличную работу virtualenv
, я использую nodeenv
. По сравнению с nvm
вы можете создать несколько сред для той же версии node (например, две среды для node 0.10
, но с разными наборами пакетов).
ENVNAME=dev1
# create an environment
python -m virtualenv ${ENVNAME}
# switch to the newly created env
source ${ENVNAME}/bin/activate
# install nodeenv
pip install nodeenv
# install system node into virtualenv
nodeenv --node=system --python-virtualenv
Чтение довольно хорошее:
https://github.com/ekalinin/nodeenv
Ответ 5
Я использовал @just-jake решение в течение некоторого времени и обнаружил, что nvm проще настроить.
Также это очень мощное решение, которое позволяет устанавливать и использовать разные версии nodejs
.
В Ubuntu 14.04 или 16.04:
-
Установите необходимые пакеты для построения nodejs
:
sudo apt-get update
sudo apt-get install build-essential libssl-dev
-
Установите nvm:
curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.31.1/install.sh | bash
В случае, если будет доступна новая версия nvm, вы можете найти фактическую команду установки на nvm сайте.
-
nvm
установщик добавит bootstrap script в ~/.bashrc
, поэтому вам нужно либо открыть терминал для его запуска, либо сделать:
source ~/.bashrc
-
Теперь вы можете установить любую версию nodejs
, которая вам нравится, переключиться между ними и т.д.
Используйте nvm ls-remote
, чтобы просмотреть доступные версии nodejs
.
Чтобы установить, например, nodejs
v4.2.4 do:
# install v4.2.4
nvm install v4.2.4
# use nodejs v4.2.4 in the current terminal session
nvm use v4.2.4
# use v4.2.4 by default in new terminal session
nvm alias default v4.2.4
Ответ 6
Чтобы расширить ответ, предоставленный Just Jake и user1533401: я не могу понизить, поскольку я использую общий хостинг, а node установлен в системном каталоге. Вот почему я меняю каталог, в котором npm устанавливает глобальные скрипты, если я хочу, чтобы он это сделал. Для тех, кто в одной лодке, вот еще одно временное исправление, которое я нашел:
npm install -g --prefix=$(npm config get prefix) <package>
Ошибка в том, что npm не читает ваш конфигурационный файл для каждого пользователя, но указывая его каждый раз, когда вы устанавливаете глобальные исправления script. Найдено здесь.
Ответ 7
Как уже говорилось здесь и здесь
npm config set prefix ~
echo export PATH=\$PATH:\~/bin >> ~/.bashrc
. ~/.bashrc