Вопрос по node.js – Установите NPM в домашний каталог с пакетом распространения nodejs (Ubuntu)

80

Я хотел бы использовать дистрибутивы Node.js (илиКрис-Леа PPA для более поздних выпусков), но установите NPM в мой домашний каталог.

Это может показаться придирчивым, но для разработчиков, использующих polyglot / github, это довольно идиотский способ настройки языковых сред выполнения / библиотек в Linux: дистрибутивные пакеты для среды выполнения, сторонние библиотеки в среде пользователя (см. Virtualenv, RVM - RVM также соберет для вас Ruby, если хотите). Если необходимо, я создам узел локально, но это PITA, поскольку Node становится второстепенным требованием разработки для многих проектов.

Смотрите также / Stackoverflow.com вопросы / 19352976 / ... Colonel Panic

Ваш Ответ

7   ответов
187

но мне все еще нравится держать систему подальше от файлов моей операционной системы. Вот как я предлагаю разделить пакеты на Nodejs:

Установите Nodejs и NPM через PPA. Затем я установил корень пакета в моем homedir для хранения «глобальных» пакетов Node:

 $ 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
Если вы находитесь в общей системе, гдеnode установлен, ноnpm нет, следуйте настройке в ответе выше, а затемnpm_config_prefix=$NPM_PACKAGES curl -L https://npmjs.org/install.sh | sh получитьnpm Сам установлен в вашем домашнем каталоге. Tim Lewis
Набор префиксов у меня не работает на npm 2.10.1, поэтому я запустилnpm config set prefix $NPM_PACKAGES Calin
Следующий скрипт утверждает, что автоматизирует это: Github.com / glenpike / NPM-g_nosudo Mike R
Я использую$HOME/.local вместо префикса. В настоящее время другие программы часто используют эту папку для хранения локальных файлов. Vaibhav K
Если вы используете:echo 'prefix = ${NPM_PACKAGES}' >> ~/.npmrc, путь не жестко закодирован в.npmrc, но npm будет читать его из переменной окружения всякий раз, когда запускается npm (заметьте, я изменил" в' для предотвращения расширения переменной оболочкой, которая выполняет эхо, и я добавил{} вокруг переменной, так как это синтаксис, используемый в.npmrc. Чтобы заставить это работать, я должен был изменить.bashrc читать:export NPM_PACKAGES="$HOME/.npm-packages". Добавлениеexport делает его доступным для npm. Я не думаю, что вам нужно добавитьexport к другим переменным. Matthijs Kooijman
22

и хотя он полезен, он ссылается на 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 официальные инструкции):Install 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 и не возиться с вашими системными файлами.

Второй вариант также описан на сайте документации NPM: Docs.npmjs.com / получение стартером / ... Vadim
5

опубликованное Джастом Джейком, великолепно. Однако из-за ошибки с npm> 1.4.10 она может работать не так, как ожидалось. (Видетьэт а такжеэт)

Пока ошибка устранена, вы можете перейти на npm 1.4.10, выполнив следующие действия:

Комментируйте строку префикса в вашем $ HOME / .npmrcБегsudo npm install -g [email protected] Убедитесь, что установлена правильная версия npm npm --version) Раскомментируйте строку префикса в вашем $ HOME / .npmrc Продолжайте устанавливать глобальные пакеты в вашу домашнюю папку!.
3

Потому что 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

Readme довольно хороший:https: //github.com/ekalinin/nodeen

2

решени какое-то время и обнаружил, что NVM проще в настройке. Также это очень мощное решение, которое позволяет устанавливать и использовать разные версииnodejs.

На Ubuntu 14.04 или 16.04:

Установите необходимые пакеты для сборкиnodejs:

sudo apt-get update
sudo apt-get install build-essential libssl-dev

Install NVM:

curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.31.1/install.sh | bash

В случае, если будет доступна более новая версия nvm, вы можете найти актуальную команду установки на NVM сайт.

nvm установщик добавит скрипт начальной загрузки в~/.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
1

я не могу понизить версию, так как использую виртуальный хостинг, и узел установлен в системном каталоге. Вот почему я должен изменить каталог, в который npm устанавливает глобальные сценарии, если я хочу, чтобы это делалось. Для тех, кто в одной лодке, вот еще одно временное исправление, которое я нашел:

npm install -g --prefix=$(npm config get prefix) <package>

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

-1

Как уже говорилосьВо а такжеВо

npm config set prefix ~
echo export PATH=\$PATH:\~/bin >> ~/.bashrc
. ~/.bashrc

Похожие вопросы