Я хотел бы использовать пакеты распространения Node.js (или chris-lea ppa для более поздних выпусков), но установить NPM в свой домашний каталог.
Это может показаться разборчивым, но для разработчиков, использующих полиглот / github, это довольно идиоматический способ настройки языковой среды выполнения / среды библиотеки под Linux: пакеты дистрибутива для среды выполнения, сторонние библиотеки в среде для каждого пользователя (см. Virtualenv, RVM - RVM также создаст для вас Ruby, если хотите). При необходимости я построю узел локально, но это PITA, поскольку узел становится случайным требованием разработки для многих проектов.
Ответы:
NPM уже установит локальные пакеты в ваши проекты, но мне все же нравится держать систему подальше от файлов моей операционной системы. Вот как я предлагаю разделить пакеты Nodejs:
Установите Nodejs и NPM через chris-lea PPA. Затем я установил корень пакета в моем домашнем каталоге для хранения «глобальных» пакетов узла:
$ 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
как обычно:[justjake@marathon:~] $ 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 coffee-script@1.3.3 /home/justjake/.npm-packages/lib/node_modules/coffee-script [justjake@marathon:~] $ which coffee /home/justjake/.npm-packages/bin/coffee
источник
node
она установлена, ноnpm
не установлена, следуйте инструкциям в приведенном выше ответе, а затемnpm_config_prefix=$NPM_PACKAGES curl -L https://npmjs.org/install.sh | sh
установитеnpm
себя в свой домашний каталог.npm config set prefix $NPM_PACKAGES
$HOME/.local
Вместо этого я использую приставку. В настоящее время это часто используемая папка другим программным обеспечением для хранения локальных файлов.echo 'prefix = ${NPM_PACKAGES}' >> ~/.npmrc
путь не задан жестко.npmrc
, но npm будет читать его из переменной среды всякий раз, когда запускается npm (обратите внимание, что я изменил"
на'
, чтобы оболочка, выполняющая эхо, не расширяла переменную, и я добавил{}
вокруг переменной , поскольку это синтаксис, используемый в.npmrc
. Чтобы эта работа работала, мне пришлось изменить его так,.bashrc
чтобы он читал:.export NPM_PACKAGES="$HOME/.npm-packages"
Добавление theexport
делает его доступным для npm. Несвязано, я думаю, вам нужно будет добавитьexport
и другие переменные.Ответ Джейка был опубликован в 2012 году, и хотя он полезен, он ссылается на PPA Криса Ли на Node.js, которые больше не обновляются с марта 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 без nvm ( официальная инструкция ):
Установите Node.js
Node.js v6 (текущий LTS по состоянию на май 2017 г.):
Node.js v7:
Измените каталог по умолчанию 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
каталоге:Теперь вы можете
install -g
безsudo
и без использования ваших системных файлов.источник
Решение, опубликованное Just Jake, отличное. Однако из-за ошибки с npm> 1.4.10 он может работать не так, как ожидалось. (Смотрите это и это )
Пока ошибка устранена, вы можете перейти на npm 1.4.10, выполнив следующие действия:
sudo npm install -g npm@1.4.10
npm --version
)источник
Поскольку python уже отлично справляется со своей задачей
virtualenv
, я используюnodeenv
. По сравнению сnvm
, вы можете создать несколько сред для одной и той же версии узла (например, две среды для узла,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's node into virtualenv nodeenv --node=system --python-virtualenv
Ридми довольно хороший: https://github.com/ekalinin/nodeenv
источник
Некоторое время я использовал решение @ just-jake и обнаружил, что nvm проще настроить. Также это очень мощное решение, которое позволяет устанавливать и использовать разные версии
nodejs
.В Ubuntu 14.04 или 16.04:
Установите необходимые пакеты для сборки
nodejs
:Установите nvm :
curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.31.1/install.sh | bash
Если будет доступна более новая версия nvm, вы можете найти фактическую команду установки на сайте nvm .
nvm
Установщик добавит сценарий начальной загрузки~/.bashrc
, поэтому вам нужно либо повторно открыть терминал, чтобы запустить его, либо сделать:Теперь вы можете установить любую
nodejs
понравившуюся версию, переключаться между ними и т. Д.Используйте
nvm ls-remote
для вывода списка доступныхnodejs
версий.Для установки, например,
nodejs
v4.2.4 выполните:# 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
источник
Чтобы расширить ответ, предоставленный Just Jake и user1533401: я не могу перейти на более раннюю версию, поскольку я использую общий хостинг, а узел установлен в системном каталоге. По этой же причине я изменил каталог, в который npm устанавливает глобальные скрипты, если я хочу, чтобы он это делал. Для тех, кто находится в той же лодке, вот еще одно временное исправление, которое, как я нашел, работает:
npm install -g --prefix=$(npm config get prefix) <package>
Ошибка в том, что npm не читает ваш файл конфигурации для каждого пользователя, но указание его при каждой установке глобального скрипта исправляет это. Нашел здесь .
источник
Как уже говорилось здесь и здесь
npm config set prefix ~ echo export PATH=\$PATH:\~/bin >> ~/.bashrc . ~/.bashrc
источник
В других ответах есть устаревшие решения: решение 2020 года использует
NPM_CONFIG_PREFIX
переменную среды. ( Подробнее )Например,
$ NPM_CONFIG_PREFIX="$HOME/.npm-packages" npm install -g ios-sim /Users/<name>/.npm-packages/bin/ios-sim -> /Users/<name>/.npm-packages/lib/node_modules/ios-sim/bin/ios-sim + ios-sim@9.0.0 added 108 packages from 68 contributors in 3.094s
источник