Los módulos de NPM no se instalarán globalmente sin sudo

Acabo de reinstalar Ubuntu 12.04 LTS, y antes que nada hice estos pasos :

  1. 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 
  2. 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 stack: 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

  3. 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 🙁

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://stackoverflow.com/a/18277225 de @passy

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:

  • las propiedades de package.json
  • npm instalar
  • Vulnerabilidades de seguridad de NodeJS: nodesecurity.io .

En cuanto a octubre de 2014:

Node.js está disponible en el repository de 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:

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.

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 fonts 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

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 stackoverflow

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

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 aquí para node / npm

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 .

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 

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

    Intereting Posts