Me gustaría usar los paquetes de distribución Node.js (o chris-lea ppa para versiones más recientes) pero instalar NPM en mi directorio de inicio.
Esto puede parecer delicado, pero es una forma bastante idiomática para que los desarrolladores que usan políglotas / github configuren entornos de tiempo de ejecución / biblioteca del lenguaje en Linux: paquetes de distribución para el tiempo de ejecución, bibliotecas de terceros en el entorno por usuario (consulte virtualenv, RVM - RVM también construirá Ruby para usted si lo desea). Si es necesario, construiré un nodo localmente, pero es un PITA ya que Node se está convirtiendo en un requisito de desarrollo incidental para muchos proyectos.
Respuestas:
NPM ya instalará paquetes locales en sus proyectos, pero todavía me gusta mantener el sistema alejado de los archivos de mi sistema operativo. Así es como sugiero compartimentar los paquetes de Nodejs:
Instale Nodejs y NPM a través del PPA chris-lea. Luego configuré una raíz de paquete en mi homedir para contener los paquetes "globales" de Nodo:
$ NPM_PACKAGES="$HOME/.npm-packages" $ mkdir -p "$NPM_PACKAGES"
Configure NPM para usar este directorio para las instalaciones de su paquete global:
$ echo "prefix = $NPM_PACKAGES" >> ~/.npmrc
Configure su PATH y MANPATH para ver los comandos en su prefijo $ NPM_PACKAGES agregando lo siguiente a su .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"
Ahora, cuando haga una
npm install -g
, NPM instalará las bibliotecas~/.npm-packages/lib/node_modules
y vinculará las herramientas ejecutables en~/.npm-packages/bin
, que está en suPATH
.Solo use
npm install -g
como lo haría normalmente:[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
fuente
node
está instalado peronpm
no lo está, siga la configuración en la respuesta anterior y luegonpm_config_prefix=$NPM_PACKAGES curl -L https://npmjs.org/install.sh | sh
paranpm
instalarse en su directorio de inicio.npm config set prefix $NPM_PACKAGES
$HOME/.local
en su lugar para el prefijo. Es una carpeta de uso común hoy en día por otro software para almacenar archivos locales.echo 'prefix = ${NPM_PACKAGES}' >> ~/.npmrc
la ruta no está codificada.npmrc
, pero npm la leerá desde la variable de entorno cada vez que se ejecute npm (tenga en cuenta que cambié"
a'
para evitar que el shell que ejecuta el eco expanda la variable, y agregué{}
alrededor de la variable , ya que esa es la sintaxis utilizada en.npmrc
. Para que esto funcione, tuve que cambiar.bashrc
para leer:.export NPM_PACKAGES="$HOME/.npm-packages"
Agregar elexport
hace que esté disponible para npm. Sin relación, creo que debería agregarexport
a las otras variables también.La respuesta de Jake se publicó en 2012 y, si bien es útil, hace referencia a los PPA Node.js de Chris Lea, que ya no se actualizan desde marzo de 2015.
Estos son los pasos que utilizo para instalar Node.js y npm en mi directorio de inicio:
Instale Node.js con nvm (no es
sudo
necesario):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
Ahora puedes
install -g
sinsudo
y todo entra~/.nvm/
O instale Node.js sin nvm ( instrucciones oficiales ):
Instalar Node.js
Node.js v6 (LTS actual a mayo de 2017):
Node.js v7:
Cambie el directorio predeterminado de npm a uno local:
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
Alternativamente, reemplácelo
.npm-global
por el directorio de su elección.Actualice npm y verifique que esté instalado en su
$HOME
directorio:Ahora puede hacerlo
install -g
sinsudo
y sin meterse con los archivos de su sistema.fuente
La solución publicada por Just Jake es excelente. Sin embargo, debido a un error con npm> 1.4.10, es posible que no funcione como se esperaba. (Ver esto y esto )
Mientras se resuelve el error, puede cambiar a npm 1.4.10 siguiendo estos pasos:
sudo npm install -g [email protected]
npm --version
)fuente
Debido a que Python ya hace un gran trabajo
virtualenv
, usonodeenv
. En comparación connvm
, puede crear varios entornos para la misma versión de nodo (por ejemplo, dos entornos para el nodo0.10
pero con diferentes conjuntos de paquetes).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
El archivo Léame es bastante bueno: https://github.com/ekalinin/nodeenv
fuente
Usé la solución @ just-jake durante algún tiempo y descubrí que nvm es más fácil de configurar. También es una solución muy poderosa que permite instalar y usar diferentes versiones de
nodejs
.En Ubuntu 14.04 o 16.04:
Instale los paquetes de requisitos previos para la construcción
nodejs
:Instalar nvm :
curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.31.1/install.sh | bash
En caso de que haya disponible una versión más reciente de nvm, puede encontrar el comando de instalación real en el sitio de nvm .
nvm
El instalador agregará un script de arranque a~/.bashrc
, por lo que debe volver a abrir el terminal para ejecutarlo o hacer:Ahora puede instalar cualquier
nodejs
versión que desee, cambiar entre ellas, etc.Úselo
nvm ls-remote
para enumerar lasnodejs
versiones disponibles .Para instalar, por ejemplo,
nodejs
v4.2.4 , haga lo siguiente:# 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
fuente
Para ampliar la respuesta proporcionada por Just Jake y user1533401: No puedo degradar porque uso alojamiento compartido y el nodo está instalado en un directorio del sistema. Esta es también la razón por la que cambié el directorio donde npm instala los scripts globales si quiero que lo haga. Para aquellos en el mismo barco, aquí hay otra solución temporal que encontré que funciona:
npm install -g --prefix=$(npm config get prefix) <package>
El error es que npm no lee su archivo de configuración por usuario, pero especificarlo cada vez que instala un script global lo corrige. Encontrado aquí .
fuente
Como ya se dijo aquí y aquí
npm config set prefix ~ echo export PATH=\$PATH:\~/bin >> ~/.bashrc . ~/.bashrc
fuente
Otras respuestas tienen soluciones obsoletas: la solución de 2020 está utilizando
NPM_CONFIG_PREFIX
la variable de entorno. (Ver detalles )Por ejemplo,
$ 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 + [email protected] added 108 packages from 68 contributors in 3.094s
fuente