node.js - problemas - npm version
Los módulos de NPM no se instalarán globalmente sin sudo (13)
Acabo de reinstalar Ubuntu 12.04 LTS, y antes que nada hice estos pasos :
Nodo instalado a través del administrador de paquetes con la siguiente secuencia de comandos
sudo apt-get update sudo apt-get install python-software-properties python g++ make sudo add-apt-repository ppa:chris-lea/node.js sudo apt-get update sudo apt-get install nodejs
Intenté instalar yeoman, express, n, generadores de yeoman globalmente y todos ellos devolvieron el mismo error
npm ERR! Error: EACCES, enlace simbólico ''../lib/node_modules/n/bin/n''
npm ERR! {[Error: EACCES, enlace simbólico ''../lib/node_modules/n/bin/n''] errno: 3, código: ''EACCES'', ruta de acceso: ''../lib/node_modules/n/bin/n''}
npm ERR!
npm ERR! Intente ejecutar este comando nuevamente como root / Administrator.
npm ERR! Sistema Linux 3.8.0-29-genérico
npm ERR! comando "/ usr / bin / node" "/ usr / bin / npm" "install" "-g" "-d" "n"
npm ERR! cwd / home / heberlz
npm ERR! nodo -v v0.10.20
npm ERR! npm -v 1.3.11
npm ERR! ruta ../lib/node_modules/n/bin/n
npm ERR! código EACCES
npm ERR! errno 3
npm ERR! Error de pila: EACCES, enlace simbólico ''../lib/node_modules/n/bin/n''
npm ERR!
npm ERR! Detalles de registro adicionales se pueden encontrar en:
npm ERR! /home/heberlz/npm-debug.log
npm ERR! no está bien el código 0
Reclamada la propiedad de las siguientes carpetas recursivamente ~ / .npm, / usr / lib / node, / usr / lib / node_modules, y de los siguientes enlaces simbólicos / usr / bin / node, / usr / bin / nodejs sin ningún éxito
Necesito instalar yeoman y sus generadores sin sudo para no tener problemas más adelante :(
En realidad, acabo de cambiar el permiso de una carpeta de usuario que era propiedad de root:
sudo chown -R $USER ~/.config/configstore
¡Entonces podría "instalar npm" y "instalar en bower" sin sudo! Funcionó bien!
Encuentre la ruta al directorio de npm:
npm config get prefix
Para muchos sistemas, esto será / usr / local.
Cambie el propietario de los directorios de npm por el nombre del usuario actual (¡su nombre de usuario!):
sudo chown -R $(whoami) $(npm config get prefix)/{lib/node_modules,bin,share}
Esto cambia los permisos de las subcarpetas utilizadas por npm y algunas otras herramientas (lib / node_modules, bin y share).
Aquí está el enlace para más detalles
https://docs.npmjs.com/getting-started/fixing-npm-permissions
Encuentro las explicaciones de Pawel Grzybek muy convincentes: se reducen a 3 simples comandos de sudo, sin tener que volver a utilizar sudo para las instalaciones globales de npm:
sudo chown -R $(whoami) /usr/local/lib/node_modules
sudo chown -R $(whoami) /usr/local/bin
sudo chown -R $(whoami) /usr/local/share
Este problema y otros causados por la misma razón se pueden resolver instalando Nodo en el espacio de usuario.
Puedes hacerlo simplemente copiando y pegando en tu terminal
NODEJS_ROOT=${NODEJS_ROOT:-~/nodejs}
cd /tmp
wget -N http://nodejs.org/dist/node-latest.tar.gz && tar xzf node-latest.tar.gz
NODEJS_CURRENT=$(tar tf node-latest.tar.gz|head -1)
mkdir -p $NODEJS_ROOT/$NODEJS_CURRENT
cd $NODEJS_CURRENT
./configure --prefix=$NODEJS_ROOT/$NODEJS_CURRENT && make install
cd $NODEJS_ROOT
rm current 2> /dev/null # Removes current symbolic link, if any
ln -s $NODEJS_CURRENT current
Se pueden lanzar los mismos comandos para actualizar el nodo a la última versión.
No te olvides de editar tu entorno. Solo una vez, hazlo
echo "export NODEJS_ROOT=$NODEJS_ROOT" >> $HOME/.bash_profile
echo ''export PATH=$NODEJS_ROOT/current/bin:$PATH'' >> $HOME/.bash_profile
source $HOME/.bash_profile # reload your env, so you can use node right now
Mira este artículo para saber cómo instalar Node.js sin sudo .
Para obtener una solución más general sobre este tema (es decir, instalar el software localmente), consulte dotsoftware .
La mejor solución que encontré fue instalar Node.js desde el paquete tar en el directorio principal del usuario y vincular la ubicación de la carpeta lib. Aquí está lo que tú necesitas hacer
Esto instalará Nodejs bajo ~ / .local / en lugar del predeterminado / usr / local /
Add this to your ~/.npmrc (create the file if it doesn''t exist already):
root = /home/YOUR-USERNAME/.local/lib/node_modules
binroot = /home/YOUR-USERNAME/.local/bin
manroot = /home/YOUR-USERNAME/.local/share/man
Download the Nodejs source code from nodejs.org and install it under your ~/.local tree:
tar xf node......
cd node........
./configure --prefix=~/.local
make
make install
Create ~/.node_modules symlink. (This directory will be automatically searched when you load modules using require "module" in scripts. I''m not sure why Node doesn''t search ~/.local/lib/node_modules by default.)
cd
ln -s .local/lib/node_modules .node_modules
Is ~/.local/bin in your path? Type
which npm
If it says ~/.local/bin/npm, you''re done.
Otherwise, do this...
export PATH=$HOME/.local/bin:$PATH
...and add that line to your ~/.profile file, so it''ll run every time you log in.
Si aún encuentra un error de propiedad o de permiso al instalar paquetes, cambie la propiedad de ~ / .local / dir ejecutando
chown -R user:user ~/.local/
Ahora deberías ser bueno para instalar paquetes a través de ''npm''
Nota: TODOS LOS COMANDOS ARRIBA MENCIONADOS DEBEN FUNCIONAR COMO USUARIO. NO UTILIZAR SUDO O RAÍZ DE INICIO DE SESIÓN
NUNCA PODRÁ CAMBIAR EL PERMISO DE LAS CARPETAS BAJO ''/ USR / LIB /''. CONDUCIRÁ A OSTA INESTABLE
Resolví este problema con la variable de entorno y el alias de shell:
export NPM_PREFIX=$HOME/node
alias npmg="npm -g --prefix $NPM_PREFIX"
Para mí, npm no respetó la configuración de "prefijo" en .npmrc.
Según esta publicación SO similar: npm arroja un error sin sudo
Parece que podría tener un problema de propiedad con el directorio ~/.npm
.
Al igual que con la respuesta en ese caso, intente:
sudo chown -R `whoami` ~/.npm
Si está en una máquina de desarrollo, es mejor que considere usar nvm .
Si no, simplemente desea instalar usando su administrador de paquetes favorito.
Cualquiera que sea el caso, recomiendo comprobar esta respuesta en
Si ya tiene $HOME/bin
en su camino, una solución más simple es simplemente ...
npm config set prefix ~
- Los nuevos comandos de nodo ahora se instalarán en su directorio
$HOME/bin
. - ¡No hay necesidad de cambiar tu camino!
Dado que esta discusión se trata realmente de reducir los riesgos de seguridad al ejecutar sudo
, también debe saber que cualquier aplicación de nodo podría estar instalando un nombre de aplicación que no coincida con el nombre del paquete de nodo registrado que cree que está instalando. Por lo tanto, existe un riesgo de seguridad de que una npm install
reemplace un comando existente del sistema o uno que ya tenga en $HOME/bin
. Si le preocupa, revise primero las propiedades del bin
y las scripts
en el archivo package.json
de la aplicación que está instalando.
En general, es más seguro para:
- (a) Coloque
$HOME/bin
last en su ruta para que los comandos del sistema no se reemplacen. - (b) no incluya "." o cualquier ruta relativa en su
$PATH
para que no ejecute accidentalmente un comando que esté en el directorio actual.
Referencia:
- package.json propiedades de package.json
- npm instalar
- Vulnerabilidades de seguridad de NodeJS: nodesecurity.io .
Ubuntu 12.04 y usando el PPA de Chris Lea para instalar los siguientes trabajos para mí:
npm config set prefix ''~/.npm-packages''
y agregando $ HOME / .npm-packages / bin a $ PATH
añadir a .bashrc
export PATH="$PATH:$HOME/.npm-packages/bin"
ver https://.com/a/18277225 de @passy
Usando lubuntu 14.04.3, traté de cambiar la propiedad de .npm y npm prefix, actualicé mi ruta, npm instaló módulos en mi directorio de inicio sin sudo pero la ruta era incorrecta por lo que los módulos como ember no se encontraron, linuxbew resolvió el problema, rápido guía de configuración here para node / npm
El problema fue que instalé el nodo usando sudo , para evitar errores al instalar módulos npm globalmente uno NUNCA DEBE instalar el nodo con sudo.
Mi solución fue reinstalar el nodo de esta manera:
Descargue las últimas fuentes de nodos estables de nodejs.org #en mi caso node-v0.10.20.tar.gz
tar -zxf node-v0.10.20.tar.gz #uncompress sources
cd node-v0.10.20 #enter carpeta sin comprimir
sudo chown -R $ USER / usr / local
./configure --prefix = / usr / local && make && make install
Una cosa a tener en cuenta es que solo tomar posesión de la carpeta / usr / local no funcionaría en mi caso porque la instalación del nodo en sí misma se realizó con sudo
El último paso para instalar a yeoman: #teenough at yeoman.io dice que al hacer "npm install -g yo" ya instala bower y gruñir, hay algunos submódulos de ronco que fallan, así que lo arreglé instalándolo por sí mismo
npm install -g bower
npm install -g gruñido
npm install -g yo
npm install -g generador-angular
En cuanto a octubre de 2014:
Node.js está disponible en el repository distribuciones binarias NodeSource Debian y Ubuntu.
curl -sL https://deb.nodesource.com/setup | sudo bash -
sudo apt-get install -y nodejs
Eso es.
Respuesta obsoleta:
La forma más rápida sin usar sudo es como la describe aquí isaac
¡Te recomiendo encarecidamente que no hagas la gestión de paquetes con sudo! Los paquetes pueden ejecutar scripts arbitrarios, lo que hace que sudoir un comando de administrador de paquetes sea tan seguro como un corte de pelo con motosierra. Claro, es rápido y definitivamente va a atravesar cualquier obstáculo, pero en realidad podrías querer ese obstáculo para permanecer allí.
Recomiendo hacer esto una vez en su lugar:
sudo chown -R $USER /usr/local
EDITAR:
Existen ciertas preocupaciones de seguridad y limitaciones de funcionalidad con respecto a cambiar la propiedad de / usr / local al usuario actual:
- si hay otro usuario en la máquina que podría usar paquetes globales npm, no cambie la propiedad de / usr / local
- https://apple.stackexchange.com/questions/1393/are-my-permissions-for-usr-local-correct
- https://askubuntu.com/questions/261326/is-it-safe-to-chown-usr-local
Una vez dicho esto, si desea instalar un módulo global sin utilizar sudo, no veo ninguna solución mejor (desde el punto de vista pragmático) que la mencionada. La seguridad frente a la facilidad de uso es un tema muy amplio, y no hay una respuesta fácil para eso, solo depende de sus requisitos.