node.js - permission - update npm
npm lanza error sin sudo (30)
Acabo de instalar node y npm a través del paquete en nodejs.org y cada vez que intento buscar o instalar algo con npm se produce el siguiente error, a menos que sudo el comando. Tengo la sensación de que esto es un problema de permisos? Ya soy el administrador.
npm ERR! Error: EACCES, open ''/Users/chietala/.npm/-/all/.cache.json''
npm ERR! { [Error: EACCES, open ''/Users/chietala/.npm/-/all/.cache.json'']
npm ERR! errno: 3,
npm ERR! code: ''EACCES'',
npm ERR! path: ''/Users/chietala/.npm/-/all/.cache.json'' }
npm ERR!
npm ERR! Please try running this command again as root/Administrator.
npm ERR! System Darwin 12.2.0
npm ERR! command "node" "/usr/local/bin/npm" "search" "bower"
npm ERR! cwd /Users/chietala
npm ERR! node -v v0.10.4
npm ERR! npm -v 1.2.18
npm ERR! path /Users/chietala/.npm/-/all/.cache.json
npm ERR! code EACCES
npm ERR! errno 3
npm ERR! stack Error: EACCES, open ''/Users/chietala/.npm/-/all/.cache.json''
npm ERR!
npm ERR! Additional logging details can be found in:
npm ERR! /Users/chietala/npm-debug.log
npm ERR! not ok code 0
Así es como resolví el problema en Windows 8.1:
- Vaya a la instalación de su nodejs (generalmente C: / Archivos de programa / nodejs)
- Haga clic derecho en la carpeta node_modules y vaya a propiedades
- Haga clic en la pestaña Seguridad y avanzado
- En la parte superior verá "Propietario: SISTEMA", haga clic en cambiar
- Ingrese el usuario para el que desea los permisos y haga clic en Aceptar
- Marque la casilla en la parte inferior de la configuración avanzada "Reemplazar todas las entradas de permisos de objetos secundarios con entradas de permisos heredables de este objeto" y haga clic en Aceptar
- Haga lo que necesita npm instalar / actualizar que necesita
Cambiar el propietario en las carpetas "global del sistema" es un hack. En una instalación nueva, configuraría NPM para usar una ubicación ya grabable para programas "globales de usuario":
npm config set prefix ~/npm
Luego asegúrate de agregar esa carpeta a tu ruta:
export PATH="$PATH:$HOME/npm/bin"
Ver la answer @ErikAndreas a los módulos NPM no se instalará globalmente sin sudo y github.com/sindresorhus/guides/blob/master/… por @sindresorhus también establece $MANPATH
.
Como si necesitamos más respuestas aquí, pero de todos modos ..
Sindre Sorus tiene una guía github.com/sindresorhus/guides/blob/master/… describe cómo instalar de forma limpia sin alterar los permisos:
Aquí hay una forma de instalar paquetes globalmente para un usuario determinado.
Crea un directorio para tus paquetes globales
mkdir "${HOME}/.npm-packages"
Consulte este directorio para uso futuro en su .bashrc / .zshrc:
NPM_PACKAGES="${HOME}/.npm-packages"
Indique a npm dónde almacenar su paquete instalado globalmente. En su archivo
$HOME/.npmrc
agregue:
prefix=${HOME}/.npm-packages
Asegúrese de que el nodo los encontrará. Agregue lo siguiente a su .bashrc / .zshrc:
NODE_PATH="$NPM_PACKAGES/lib/node_modules:$NODE_PATH"
Asegúrese de que encontrará binarios instalados y páginas de manual. Agregue lo siguiente a su
.bashrc
/.zshrc
:
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 config MANPATH="$NPM_PACKAGES/share/man:$(manpath)"
Echa un vistazo a npm-g_nosudo para realizar los pasos anteriores de forma automática.
Echa un vistazo a la github.com/sindresorhus/guides/blob/master/… para las últimas actualizaciones.
Cuando ejecuta npm install -g somepackage, puede obtener un error EACCES que le pide que ejecute el comando nuevamente como root / Administrator. Es una cuestión de permisos.
Es fácil de arreglar , abra su terminal (Aplicaciones> Utilidades> Terminal)
sudo chown -R $USER /usr/local/lib/node_modules
** Le recomiendo encarecidamente que no use la administración de paquetes con sudo (sudo npm -g install algo), porque puede obtener algunos problemas más adelante **
Referencia: http://foohack.com/2010/08/intro-to-npm/
En Mac OS X, al instalar Homebrew''s brew install npm
, la ruta de instalación es /usr/local/share/npm/
con bin/
y lib/node_modules/
subfolders.
Ejecutar este comando para cambiar de propietario a su usuario que está conectado actualmente debería arreglarlo todo y permitirle instalar paquetes globales de NPM sin sudo
.
sudo chown -R $USER ~/.npm /usr/local/share/npm/
osx homebrew
En caso de que sudo chown -R $(whoami) ~/.npm
no haya funcionado para usted, o necesite una solución de comando que no sea de terminal.
El problema es que su cuenta de usuario no tiene permiso de escritura para la carpeta node_modules, por lo que puede hacer lo siguiente
Abra el buscador y presione
cmd
+shift
+g
para abrir vaya a la carpeta con urlEscriba la siguiente ruta
/usr/local/lib/node_modules
y presione irHaga clic derecho en la carpeta
node_modules
y elijaGet Info
Desplácese hacia abajo a la sección de
sharing & permissions
Desbloquear para poder realizar cambios.
Presiona
+
y agrega tu cuenta de usuarioAsegúrese de que elige
Read & Write
en el privilegio desplegable
Ahora debería poder instalar paquetes sin sudo
y deberían resolverse los problemas de permisos
En mi caso, es por el permiso de ~ / tmp. Así que hago:
sudo chown -R $USER ~/tmp
¡Y esta bien!
En realidad, yo también estaba teniendo el mismo problema. Yo estaba ejecutando Ubuntu. El problema mío surge porque había perdido mi clave pública de Ubuntu. Incluso actualizar mi sistema no estaba sucediendo. Estaba dando error GPG. En ese caso, puede recuperar su clave usando este comando:
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys <key in GPG error>
Después de eso npm funciona bien!
Encontré esto al instalar Recess ( https://github.com/twitter/recess ) para compilar mi CSS para Bootstrap 3.
Al instalar el recreo:
-npm install recess -g
Necesitas desbloquear permisos en tu directorio de
home
, como dice :sudo chown -R `whoami` ~/.npm
También necesita permisos de escritura en el directorio
node_modules
, como dice , así que si aún no funciona, intente:sudo chown -R `whoami` /usr/local/lib/node_modules
Si aún observa errores, es posible que también deba corregir
/usr/local
permisos/usr/local
:sudo chown -R `whoami` /usr/local
Tenga en cuenta que, como se indica en esta publicación, /usr/local/
no es realmente un directorio de sistema si está en una Mac, por lo tanto, esta respuesta es perfectamente "segura" para los usuarios de Mac. Sin embargo, si está en Linux, consulte la respuesta de Christopher Will a continuación para obtener una solución segura para el sistema de instalación de sistemas (pero más compleja) fácil de usar para múltiples usuarios.
Esta es la solución que utilicé y trabajé. Intenté utilizar whoami
nunca funcionó.
sudo chown -R $USER /usr/local/lib/node_modules
entonces
sudo chown -R $USER /usr/local/bin/npm
entonces
sudo chown -R $USER /usr/local/bin/node
Esto parece un problema de permisos en su directorio de inicio. Para reclamar la propiedad del directorio .npm ejecute:
sudo chown -R $(whoami) ~/.npm
John Papa señala la historia y el razonamiento detrás de este problema y ofrece una solución sólida :
Los pasos de John Papa son:
- Use brew para instalar el nodo sin npm
- Actualice su .bash_profile / .bashrc para que npm y node puedan saber dónde instalar y encontrar paquetes
- Usa brew para actualizar node y npm para actualizarse
Espero que esto ayude a los curiosos!
La documentación oficial sobre cómo reparar los npm install
con un error EACCES
se encuentra en https://docs.npmjs.com/getting-started/fixing-npm-permissions .
Encontré este problema después de una nueva instalación del nodo usando el instalador .pkg
en OSX. Aquí hay algunas respuestas geniales, pero no vi un enlace a npmjs.com todavía.
Opción 1: cambiar el permiso al directorio predeterminado de npm
Encuentra la ruta al directorio de npm:
npm config get prefix
Para muchos sistemas, esto será / usr / local .
ADVERTENCIA : Si la ruta mostrada es solo / usr , cambie a la Opción 2 .
Cambie el propietario de los directorios de npm al 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 ).
Opción 2: cambiar el directorio predeterminado de npm a otro directorio
Hay ocasiones en las que no desea cambiar la propiedad del directorio predeterminado que utiliza npm (es decir, / usr ), ya que esto podría causar algunos problemas, por ejemplo, si está compartiendo el sistema con otros usuarios.
En su lugar, puede configurar npm para utilizar un directorio diferente por completo. En nuestro caso, este será un directorio oculto en nuestra carpeta de inicio.
Haga un directorio para instalaciones globales:
mkdir ~/.npm-global
Configure npm para usar la nueva ruta del directorio:
npm config set prefix ''~/.npm-global''
Abra o cree un archivo ~ / .profile y agregue esta línea:
export PATH=~/.npm-global/bin:$PATH
De vuelta en la línea de comandos, actualice las variables de su sistema:
source ~/.profile
La respuesta de @Yves M. fue muy similar a mi solución. Aquí están los comandos que utilicé, que eran ligeramente diferentes de los suyos.
curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.31.0/install.sh | bash
A continuación, consulte la última versión:
nvm ls-remote
A continuación, instale la versión más reciente:
nvm install YOUR_VERSION_HERE
ejemplo
nvm install v5.8.0
Lo que a mí me parece que la mejor opción es la sugerida en la documentación de npm , que es verificar primero dónde se instalan los npm config get prefix
globales de forma predeterminada ejecutando el npm config get prefix
. Si obtienes, como hago con Trusty, /usr
, es posible que desees cambiarlo a una carpeta que puedas poseer de manera segura sin arruinar las cosas como lo hice yo.
Para hacerlo, elija o cree una nueva carpeta en su sistema. Es posible que desee tenerlo en su directorio de inicio o, como yo, en /usr/local
para mayor coherencia porque también soy un usuario de Mac (prefiero no tener que buscar en diferentes lugares dependiendo de la máquina en la que esté. frente de). Otra buena razón para hacerlo es el hecho de que la carpeta /usr/local
probablemente ya se encuentre en su RUTA (a menos que desee entrometerse con su RUTA), pero es probable que su carpeta recién creada no lo esté y que deba hacerlo. agréguelo usted mismo al PATH en su archivo .bash-profile o .bashrc .
En pocas palabras, cambié la ubicación predeterminada de los módulos globales con el npm config set prefix ''/usr/local''
, creé la carpeta /usr/local/lib/node_modules
(será utilizada por npm) y cambié los permisos de las carpetas utilizado por npm con el comando:
sudo chown -R $(whoami) $(npm config get prefix)/{lib/node_modules,bin,share}
Ahora puedes instalar de forma global cualquier módulo de forma segura. ¡Espero que esto ayude!
Los permisos que usó al instalar Node serán necesarios cuando haga cosas como escribir en su directorio npm link
( npm link
npm install -g
, npm install -g
, etc.).
Probablemente ejecutó la instalación de nodos con permisos de raíz, por eso la instalación del paquete global le está pidiendo que sea root.
Solución 1: NVM
No hackear con permisos, instale el nodo de la manera correcta.
En una máquina de desarrollo, no debe instalar y ejecutar el nodo con permisos de raíz, de lo contrario, npm link
, npm install -g
necesitarán los mismos permisos.
NVM (Node Version Manager) te permite instalar Node sin permisos de root y también te permite instalar muchas versiones de Node para jugar fácilmente con ellos ... Perfecto para el desarrollo.
- Desinstalar el nodo (probablemente se requerirá permiso de root). This podría ayudarte.
- Luego instale NVM siguiendo las instrucciones NVM .
- Instale el nodo a través de NVM:
nvm install node
Ahora npm link
, npm install -g
ya no requerirá que seas root.
Editar: Consulte también https://docs.npmjs.com/getting-started/fixing-npm-permissions
Solución 2: instalar paquetes globalmente para un usuario determinado
No trates con permisos, instala paquetes npm globalmente de la manera correcta.
Si está en OSX o Linux, puede crear un directorio dedicado para el usuario para su paquete global y configurar npm
y node
para saber cómo encontrar paquetes instalados globalmente.
Consulte github.com/sindresorhus/guides/blob/master/… para obtener instrucciones paso a paso sobre la instalación de módulos npm en todo el mundo sin sudo.
Consulte también: documentación de https://docs.npmjs.com/getting-started/fixing-npm-permissions sobre la https://docs.npmjs.com/getting-started/fixing-npm-permissions .
No tomo crédito por esta solución. Gracias a este chico: https://gist.github.com/isaacs/579814
# take ownership of the folders that npm/node use
# please don''t do this if you don''t know what it does!
sudo mkdir -p /usr/local/{share/man,bin,lib/node,include/node}
sudo chown -R $USER /usr/local/{share/man,bin,lib/node,include/node}
# now just a pretty vanilla node install
# let it use the default paths, but don''t use sudo, since there''s no need
mkdir node-install
curl http://nodejs.org/dist/node-v0.4.3.tar.gz | tar -xzf - -C node-install
cd node-install/*
./configure
make install
# now the npm easy-install
curl https://www.npmjs.org/install.sh | sh
Y entonces ...
sudo chown -R web:web /home/web/api/
sudo runuser -l web -c ''npm install --prefix /home/web/api''
De esa forma, el nodo nunca se ejecuta como root y su usuario puede instalarlo sin sudo.
Otra gran solución aquí para configurar NPM correctamente, ejecute los siguientes comandos:
npm config set prefix ''~/.npm_packages''
PATH=$PATH:$HOME/.npm_packages/bin; export PATH
Otras respuestas sugieren que se cambie la propiedad o los permisos de los directorios del sistema a un usuario específico. No me gusta mucho hacerlo, ¡esto puede volverse muy incómodo y podría arruinar todo el sistema!
Aquí hay un enfoque más genérico y seguro que también es compatible con múltiples usuarios.
Cree un nuevo grupo para usuarios de nodo y agregue los usuarios necesarios a este grupo. Luego, establezca la propiedad de los archivos / directorios dependientes del nodo para este grupo.
# Create new group
sudo groupadd nodegrp
# Add user to group (logname is a variable and gets replaced by the currently logged in user)
sudo usermod -a -G nodegrp `logname`
# Instant access to group without re-login
newgrp nodegrp
# Check group - nodegrp should be listed as well now
groups
# Change group of node_modules, node, npm to new group
sudo chgrp -R nodegrp /usr/lib/node_modules/
sudo chgrp nodegrp /usr/bin/node
sudo chgrp nodegrp /usr/bin/npm
# (You may want to change a couple of more files (like grunt etc) in your /usr/bin/ directory.)
Ahora puedes instalar fácilmente tus módulos como usuario
npm install -g generator-angular
Algunos módulos (grunt, bower, yo, etc.) todavía deberán instalarse como root. Esto se debe a que crean enlaces simbólicos en / user / bin /.
Editar
3 años después recomiendo usar NVM . Te ahorra mucho tiempo y problemas.
Para Mac (adoptado de la respuesta de Christoper Will)
Mac OS X 10.9.4
Preferencia del sistema> Usuarios y grupos> (desbloquear)> presionar +:
Nueva cuenta> "Grupo"
Nombre de cuenta: nodegrpDespués de crear el grupo, marque el usuario para ser incluido en este grupo
sudo chgrp -R nodegrp / usr / local / lib / node_modules /
sudo chgrp nodegrp / usr / bin / node
sudo chgrp nodegrp / usr / bin / npm
sudo chown -R $ (whoami): nodegrp ~ / .npm
Para mi, ejecuta solo
sudo chown -R $(whoami) ~/.npm
no funciona Entonces, ejecuto también
sudo chown -R $(whoami) /usr/lib/node_modules/
sudo chown -R $(whoami) /usr/bin/node
sudo chown -R $(whoami) /usr/bin/npm
¡Y todo funciona bien!
Problema: no tiene permiso para escribir en los directorios que npm utiliza para almacenar paquetes y comandos globales.
Solución: Permitir permiso para npm.
Abre una terminal:
comando + barra espaciadora luego escriba ''terminal''
Ingrese este comando:
sudo chown -R $ (whoami) $ (npm config get prefix) / {lib / node_modules, bin, share}
- Nota: esto requerirá su contraseña.
Esta solución permite el permiso SOLO de los directorios necesarios, manteniendo los otros directorios agradables y seguros.
Si aparece algo como lo siguiente a continuación durante la instalación de npm o si desea instalar paquetes globalmente en una Mac, use Sudo
npm ERR! codigo EACCES
npm ERR! errno -13
npm ERR! acceso syscall
Si no le ayuda cambiar los permisos para el directorio /usr/local/lib/npm_modules
, debe agregar su usuario al grupo (en la mayoría de los casos, este es un grupo de staff
), que tiene derechos rwx para el directorio /usr/bin
. Porque npm intenta hacer un symlink
con /usr/bin/__package__
.
PS No te olvides de volver a iniciar sesión después de cambiar el grupo de usuarios
TL; DR
siempre use
sudo -i
osudo -H
cuando ejecutenpm install
para instalar paquetes globales.
-
Cuando usa npm
, descarga paquetes a su directorio de inicio de usuario. Cuando se ejecuta como sudo, npm
instala archivos en el mismo directorio, pero ahora son propiedad de root.
Así que esto es lo que le sucede a cada persona que ha usado npm
:
- instala algunos paquetes locales sin problemas usando
npm install foo
- instale el paquete global usando
sudo install -g foo-cli
sin problema - intento de instalar el paquete local con la
npm install bar
- frustrarse con los diseñadores de
npm
ahora que tiene que ir achmod
un directorio nuevo
Cuando use la opción -i
o -H
con sudo, su directorio de inicio será el directorio de inicio de root
. Cualquier instalación global almacenará en caché los paquetes en /root/.npm
lugar de root
archivos de root
en /home/me/.npm
.
Siempre use sudo -i
o sudo -H
cuando ejecute npm install
para instalar paquetes globales y sus problemas de permisos de npm
desaparecerán.
Para bien
http://hood.ie/blog/why-you-shouldnt-use-sudo-with-npm.html
- qv la respuesta aceptada para arreglar un npm
ya jodido.
También necesitará el permiso de escritura en el directorio node_modules
:
sudo chown -R $USER /usr/local/lib/node_modules
Tuve un problema similar en NPM. Los módulos no se instalarán globalmente sin sudo , el problema fue que cuando instalé el nodo lo hice con sudo a través de chris / lea ppa repo .
Mi solución fue desinstalar el nodo y luego instalarlo 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 fuentes
cd node-v0.10.20 #enter carpeta sin comprimir
sudo chown $ USUARIO -R / usr / local
./configure --prefix = / usr / local && make && make install
PD: Si no desea cambiar la propiedad de la carpeta / usr / local, puede instalarla en algún lugar que ya posea. El problema de este enfoque es que tendrá que vincular la carpeta de instalación con la línea de comandos de bash para que podamos usar el comando de nodo más adelante
mkdir ~ / opt
./configure --prefix = ~ / opt && make && make install
echo ''export PATH = ~ / opt / bin: $ {PATH}'' >> ~ / .bashrc #or ~ / .profile o ~ / .bash_profile o ~ / .zshenv dependiendo del sistema operativo actual
Con cualquiera de estos enfoques, podrá hacer lo siguiente sin usar sudo
npm install -g module_to_install
puedes probar esto
sudo chown -R $(whoami) $(npm config get prefix)/{lib/node_modules,bin,share}
¡¡¡Cuidado!!! ¡¡¡Cuidado!!! ¡¡¡Cuidado!!!
chown o chmod NO es la solución, debido al riesgo de seguridad.
En lugar de hacer esto, haz:
Primero verifique, donde npm apunta, si llama:
npm config get prefix
Si se devuelve / usr, puede hacer lo siguiente:
mkdir ~/.npm-global
export NPM_CONFIG_PREFIX=~/.npm-global
export PATH=$PATH:~/.npm-global/bin
Esto crea un npm-Direktory en su directorio de inicio y apunta npm a él.
Para que estos cambios sean permanentes, debe agregar el comando de exportación a su .bashrc:
echo -e "export NPM_CONFIG_PREFIX=~/.npm-global/nexport PATH=$PATH:~/.npm-global/bin" >> ~/.bashrc
PROBLEMA : Usted (el usuario) no tiene el conjunto correcto de permisos para el directorio.
La salida instantánea es ejecutar la instalación de npm usando sudo, pero esto puede darte el mismo error o una instalación incorrecta.
Y cambiar la propiedad del directorio no es una buena opción, un parche temporal.
Solución / sugerencia : cambiar el directorio predeterminado de npm (de docs oficiales)
Haga una copia de seguridad de su computadora antes de seguir adelante.
(opcional) En caso de que tenga una instalación errónea, primero desinstálela:
npm uninstall <package-name> # use sudo if you used it while installation
npm cache verify # or, npm cache clean for npm version below 5.x.x
Haga un directorio para instalaciones globales:
mkdir ~/.npm-global
Configure npm para usar la nueva ruta del directorio:
npm config set prefix ''~/.npm-global''
Abra o cree un
~/.profile
o~/.bash_profile
y agregue esta línea:export PATH=~/.npm-global/bin:$PATH
De vuelta en la línea de comandos, actualice las variables de su sistema o reinicie el terminal:
source ~/.profile
(Opcional) Prueba: descargue un paquete globalmente sin usar sudo.
npm install -g jshint