npm arroja error sin sudo


1288

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 arroja el siguiente error, a menos que sudo el comando. Tengo la sensación de que este 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

35
Considere la solución usando NVM : stackoverflow.com/a/24404451/1480391 (en lugar de piratear con permisos)
Yves M.

2
@janaspage No puede instalar el nodo o NVM (Node Version Manager) a través de NPM (Node Package Manager), no tiene sentido. NPM viene dentro del nodo (se instala al mismo tiempo). Echa un vistazo a la página de Wikipedia: en.wikipedia.org/wiki/Npm_(software)
Yves M.

55
Finalmente una solución mejor que sudo chown: github.com/sindresorhus/guides/blob/master/…
Dmitri Zaitsev

Bajo OSX y el nodo de instalación con el instalador oficial de paquetes 0 esta solución no funcionó.
Usé

2
Explica el problema y la solución: docs.npmjs.com/getting-started/fixing-npm-permissions
n00b

Respuestas:


2269

Esto parece un problema de permisos en su directorio de inicio. Para reclamar la propiedad del directorio .npm , ejecute:

sudo chown -R $(whoami) ~/.npm

102
Pensé que whoamiera un marcador de posición, pero funciona escrito literalmente como está, por lo que debe ser una variable que no entiendo.
SimplGy

127
whoami es un comando de shell real en.wikipedia.org/wiki/Whoami . Los backticks alrededor whoamiaseguran que se ejecute correctamente y luego se coloque en el comando chown
Noah

13
también puede especificar manualmente su nombre de usuario. Si su nombre de usuario es "simple como debería ser", el comando seríasudo chown -R simpleascouldbe ~/.npm
Noah,

13
npm NO requiere ni debe usar sudo - vea la respuesta a continuación @HeberLZ en particular su segunda opción con respecto a: ./configure --prefix = xxxxxx
Scott Stensland

99
@ChristopherWill: Esto no está cambiando la propiedad de un directorio del sistema. Esto está cambiando la propiedad de los directorios en el directorio de inicio del usuario, que debe ser propiedad del usuario.
user4815162342

620

Se requerirán los permisos que usó al instalar Node al hacer cosas como escribir en su directorio npm ( npm link,npm install -g , etc.).

Probablemente ejecutó la instalación de nodo con permisos de root, por eso la instalación global del paquete le pide que sea root.


Solución 1: NVM

No piratee con permisos, instale el nodo de la manera correcta.

En una máquina de desarrollo, no debe instalar y ejecutar un nodo con permisos de root, de lo contrario npm link, npm install -gnecesitará los mismos permisos.

NVM (Node Version Manager) le permite instalar Node sin permisos de root y también le permite instalar muchas versiones de Node para jugar fácilmente con ellos. Perfecto para el desarrollo.

  1. Desinstalar nodo (probablemente se requerirá permiso de root). Esto te puede ayudar.
  2. Luego instale NVM siguiendo las instrucciones en esta página .
  3. Instalar Nodo a través de NVM: nvm install node

Ahora npm link, npm install -gya 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 piratee con permisos, instale paquetes npm globalmente de la manera correcta.

Si está en OSX o Linux, puede crear un directorio dedicado para el usuario para su paquete y configuración globalnpm y nodesaber cómo encontrar paquetes instalados globalmente.

Consulte este excelente artículo para obtener instrucciones paso a paso sobre cómo instalar módulos npm a nivel mundial sin sudo.

Consulte también: documentación de npm sobre la fijación de permisos npm .


32
De todas las soluciones publicadas, la solución NVM aquí proporcionó los mejores resultados para mí. Recomiendo usar NVM en lugar de jugar con permisos.
wenincode

99
Estas instrucciones funcionaron muy bien. Sin embargo, es probable que desee eliminar los módulos que ha instalado con sudo antes de desinstalar nodejs : npm ls -gp | awk -F/ '/node_modules/ && !/node_modules.*node_modules/ {print $NF}' | xargs npm -g rm- Tuve que reinstalar nodejs y en un shell raíz y desinstalarlos, de lo contrario, continuará teniendo enlaces simbólicos a yo, gruñido, etc.
Bruno Flávio

44
Esta es la mejor solución, eliminé todos los módulos primero haciendo sudo npm list -g --depth=0. | awk -F ' ' '{print $2}' | awk -F '@' '{print $1}' | sudo xargs npm remove -g stackoverflow.com/a/22290968/1449157 y luego lo eliminénpm y lo instalé a través denvm
Fabio Antunes

3
Para obtener instrucciones de desinstalación para el nodo, use esta respuesta SO stackoverflow.com/a/11178106/480031
seangates

3
¿Por qué está bien usar root para instalar el nodo en una máquina de producción?
Bruno Peres

401

También necesitará el permiso de escritura en el node_modulesdirectorio:

sudo chown -R $USER /usr/local/lib/node_modules

77
Así como el ~/tmpdirectorio para mí.
conocidoasilya

123
No sé por qué esto todavía recibe votos positivos. ¡Es una muy mala práctica cambiar la propiedad de los directorios del sistema a un usuario en particular! Consulte la respuesta a continuación para ver otras soluciones (como crear un grupo separado para usuarios de nodos).
Christopher Will

1
no tengo node_modulesen /usr/local/lib/. wtf?
Connor Leech

27
Hagas lo que hagas - ABSOLUTAMENTE no ejecutes 'sudo chmod -R whoami' en / usr / local / lib o / usr / lib / arruinarás tu archivo de sudoers y te odiarás a ti mismo.
qodeninja

77
todos, por favor denote esto ... Then I ran sudo chown -R $USER /* and everything was fine- NO - estás arruinando tu máquina.
commonpike

75

Cambiar el propietario en las carpetas "system-global" es un hack. En una instalación nueva, configuraría NPM para usar una ubicación que ya se puede escribir para programas "globales de usuario":

npm config set prefix ~/npm

Luego, asegúrese de agregar esa carpeta a su ruta:

export PATH="$PATH:$HOME/npm/bin"

Ver la respuesta de @ErikAndreas a los módulos NPM no se instalará globalmente sin sudo y una guía paso a paso más larga de @sindresorhus con también conjuntos .$MANPATH


Estoy totalmente de acuerdo, excepto que sugeriría que si solo configura el prefijo $HOME, normalmente su .profilesecuencia de comandos se encargará de $PATHla próxima vez que la obtenga (por ejemplo, la próxima vez que inicie sesión).
Jess Austin

@JessAustin: Quizás, pero también traerá más desorden a su $HOMEe interferiría con otros (¿futuros?) Archivos / subcarpetas NPM. Prefiere mantener los binarios de diferentes gestores de paquetes / idiomas / sistemas de compilación separados, y establecerlos explícitamente $PATH(en un script de tiempo de inicio de sesión).
Joel Purra

Eh, desorden? Estamos hablando de módulos instalados globalmente en ~/lib/node_modules, con su CLI asociada, si existe, en ~/bin. Para muchos usuarios, especialmente si no tienen raíz, tanto ~/biny ~/libya existen.
Jess Austin

@JessAustin: también es una cuestión de colisiones de nombres para bibliotecas y binarios. Supongamos que apunta a NPM para colocar binarios ~/biny luego hacer lo mismo para uno o dos administradores de paquetes adicionales. Puede que no suceda hoy o mañana, pero existe un claro riesgo de que dos paquetes de diferentes administradores tengan una colisión de nombres y sobrescriban los archivos de los demás. Ese es un caso suficientemente bueno para que tenga prefijos separados. (Se agradecerían ejemplos concretos).
Joel Purra

1
Esto debe ser aceptado como la mejor respuesta. Cambiar las carpetas globales del sistema puede ser peligroso.
Vladimir Marton

58

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
  1. Necesita desbloquear permisos en su homedirectorio, como dice Noah :

    sudo chown -R `whoami` ~/.npm
  2. También necesita permisos de escritura en el node_modulesdirectorio, como dice Xilo , por lo que si aún no funciona, intente:

    sudo chown -R `whoami` /usr/local/lib/node_modules
  3. Si todavía ve errores, es posible que también deba corregir los /usr/localpermisos :

    sudo chown -R `whoami` /usr/local

Tenga en cuenta que, como se indica en esta publicación, en /usr/local/ realidad no es un directorio del sistema si está en una Mac, por lo que esta respuesta es realmente "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 usuario (pero más compleja) para múltiples usuarios.


35
Esta es una mala idea. Probablemente no desee que los directorios del sistema sean propiedad de un usuario en particular. Además de serias preocupaciones de seguridad, esto tampoco es compatible con múltiples usuarios.
Christopher Will

2
Sí, pero es una gran solución para un entorno de desarrollo +2, especialmente si ya ha instalado node.js y solo necesita seguir rockeando.
elliotrock

Realmente no deberías tener paquetes fuera de tu directorio de inicio
Ben

1
Si no está en su carpeta de inicio, es un directorio del sistema, a pesar de cualquier afirmación en contrario. El hecho de que OS X no lo use no significa que no sea un directorio del sistema.
Rich Remer

53

¡¡¡Cuidado!!! ¡¡¡Cuidado!!! ¡¡¡Cuidado!!!

chown o chmod NO es la solución, debido al riesgo de seguridad.

En cambio, haga esto, haga:

Primero verifique, a dónde apunta npm, 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-Directory en su Home-Directory y apúntelo npm.

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

¿Debo cambiar a la opción 2 si tengo / usr?
Albert Laure

3
Tenga en cuenta que el último comando realmente genera el contenido de $PATH, no la cadena en sí. Deberías cambiar eso.
Veluria

1
Esto lo solucionó! Gracias.
Recibía

1
Esta es la mejor respuesta. Es la forma recomendada de resolver el problema.
Paulo Coghi - Restablece a Mónica el

¿Por qué es un riesgo para la seguridad?
Frank

40

Otras respuestas sugieren cambiar las propiedades o permisos de los directorios del sistema a un usuario específico. No recomiendo hacerlo, ¡esto puede volverse muy incómodo y dañar todo el sistema!

Aquí hay un enfoque más genérico y seguro que también admite usuarios múltiples.

Cree un nuevo grupo para usuarios de nodo y agregue los usuarios necesarios a este grupo. Luego configure la propiedad de los archivos / directorios dependientes de nodos 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 puede instalar fácilmente sus módulos como usuario

npm install -g generator-angular

Algunos módulos (gruñidos, bower, yo, etc.) aún deberán instalarse como root. Esto se debe a que crean enlaces simbólicos en / user / bin /.

Editar

3 años después, recomendaría usar Node Version Manager . Le ahorra mucho tiempo y problemas.


2
Si el nodo está instalado por las fuentes, aunque multiusuario sería un problema, todos los módulos funcionarían perfectamente sin el uso de sudo. Esto también es muy importante porque en el caso del módulo yeoman, las personas no pueden actualizar los generadores mediante la sudoración de la aplicación yeoman ya que no permite la ejecución de sudo :(
HeberLZ

1
En Linux, normalmente uso el staffgrupo integrado para otorgar permisos a mis carpetas de desarrollo. Además, es una buena idea ejecutar chmod g+ws node_modulespara asegurarse de que su grupo tenga permiso de lectura / escritura.
jackvsworld

@jackvsworld No estaba al tanto del grupo de personal. Supongo que esta sería una solución más fluida, ya que uno no tiene que crear un nuevo grupo ficticio ... aunque sería menos explícito. Pero gracias por esta entrada.
Christopher Will

En términos generales, /usr/libestá bajo el control de su administrador de paquetes del sistema y no debe realizar ningún cambio allí.
rico remer

23

La documentación oficial sobre cómo corregir los npm installpermisos con un EACCESerror se encuentra en https://docs.npmjs.com/getting-started/fixing-npm-permissions .

Encontré este problema después de una nueva instalación de nodo usando el .pkg instalador en OSX. Aquí hay algunas respuestas excelentes, pero todavía no he visto un enlace a npmjs.com.

Opción 1: cambiar el permiso al directorio predeterminado de npm

  1. Encuentre la ruta al directorio de npm:

    npm config get prefix

Para muchos sistemas, esto será / usr / local .

ADVERTENCIA : Si la ruta que se muestra es solo / usr , cambie a la Opción 2 .

  1. 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 momentos en que no desea cambiar la propiedad del directorio predeterminado que usa npm (es decir, / usr ) ya que esto podría causar algunos problemas, por ejemplo, si comparte el sistema con otros usuarios.

En su lugar, puede configurar npm para usar un directorio completamente diferente. En nuestro caso, este será un directorio oculto en nuestra carpeta de inicio.

  1. Haga un directorio para instalaciones globales:

    mkdir ~/.npm-global
  2. Configure npm para usar la nueva ruta del directorio:

    npm config set prefix '~/.npm-global'
  3. Abra o cree un archivo ~ / .profile y agregue esta línea:

    export PATH=~/.npm-global/bin:$PATH
  4. De vuelta en la línea de comando, actualice las variables de su sistema:

    source ~/.profile

1
Gracias, este funcionó para mí, ya que la solución de chown no. Me salvaste.
fmquaglia

¿Debo cambiar a la opción 2 si tengo / usr?
Albert Laure

Me encanta la opción 2. de esta respuesta (1) No tiene las vulnerabilidades de seguridad de usar sudo, (2) conserva la arquitectura para otros usuarios, (3) hace referencia a la documentación, Y (4) tiene la línea de comandos necesaria entradas incluidas. ¡Gracias por añadir!
Tom Rose

Entonces, ¿qué sucede cuando instalas algo en el que están vinculados /usr/bin/? Ahora solo tu usuario puede acceder a él. Inicia sesión como otra persona, todavía no tiene acceso, ¡ya que los archivos están en el directorio de inicio de otro usuario!
Frans

Bien, este funcionó para mí. Gracias por la explicación además de los comandos.
FrankByte.com

12

Como si necesitáramos más respuestas aquí, pero de todos modos ...

Sindre Sorus tiene una guía Instalar paquetes npm a nivel mundial sin sudo en OS X y Linux que describe cómo instalar de manera limpia sin alterar los permisos:

Aquí hay una manera de instalar paquetes globalmente para un usuario determinado.

  1. Cree un directorio para sus paquetes globales

    mkdir "${HOME}/.npm-packages"
  2. Consulte este directorio para uso futuro en su .bashrc / .zshrc:

    NPM_PACKAGES="${HOME}/.npm-packages"
  3. Indique a npm dónde almacenar su paquete instalado globalmente. En su $HOME/.npmrcarchivo agregue:

    prefix=${HOME}/.npm-packages
  4. Asegúrese de que el nodo los encuentre. Agregue lo siguiente a su .bashrc / .zshrc:

    NODE_PATH="$NPM_PACKAGES/lib/node_modules:$NODE_PATH"
  5. Asegúrese de 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)"

Consulte npm-g_nosudo para realizar los pasos anteriores de forma automática

Consulte la fuente de esta guía para obtener las últimas actualizaciones.


2
tx para la edición @AndyHayden :) Mi método preferido se sugiere en los comentarios anteriores: ¡use NVM! stackoverflow.com/a/24404451/1480391
ptim

La única solución que funcionó para mí que no implica perder el tiempo con permisos. Odio a NPM y su estupidez de permisos idiotas. Gracias por la solucion!
RyanNerd

8

TL; DR

siempre use sudo -io sudo -Hcuando se ejecute npm installpara instalar paquetes globales.

-

Cuando lo usa npm, descarga paquetes en su directorio de inicio de usuario. Cuando corres como sudo,npm instala archivos en el mismo directorio, pero ahora son propiedad de root.

Entonces, esto es lo que le sucede a absolutamente todas las personas que alguna vez han usado npm:

  • instale algunos paquetes locales sin problemas usando npm install foo
  • Instalar paquete global utilizando sudo install -g foo-clisin problema
  • intenta instalar el paquete local con npm install bar
  • frustrarse con los npmdiseñadores ahora que tiene que ir a chmodun directorio nuevamente

Cuando usa la opción -io -Hcon sudo, su directorio de inicio será rootel directorio de inicio. Cualquier instalación global almacenará en caché los paquetes en /root/.npmlugar de los rootarchivos propios en /home/me/.npm.

Simplemente use sudo -io sudo -Hcuando se ejecute npm installpara instalar paquetes globales y sus npmproblemas de permisos desaparecerán.

Para bien

http://hood.ie/blog/why-you-shouldnt-use-sudo-with-npm.html

- qv la respuesta aceptada para arreglar un ya jodido npm.


mejor y más simple solución
Manjeet Singh

6

Tuve un problema similar en los módulos NPM que no se instalarán globalmente sin sudo , el problema era 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 nodo estable 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 $ USER -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 comando 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 esos enfoques, podrá hacer lo siguiente sin usar sudo

npm install -g module_to_install


1
Terminé usando este método. Utilicé sudo chown $USER /use/localantes de construir. Se ve bien hasta ahora, ¡es hora de intentar construir un átomo! ¡Gracias!
prasanthv

6

Cuando ejecuta npm install -g somepackage, puede recibir un error de EACCES que le pide que ejecute el comando nuevamente como root / Administrator. Es un problema 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 something), porque puede obtener algunos problemas más adelante **

Referencia: http://foohack.com/2010/08/intro-to-npm/


¡Hurra! este me lo hizo! después de hacer los demás por encima de los demás: sudo chown -R `whoami` ~/.npm, sudo chown -R `whoami` /usr/local/liby
Regis Zaleman

8
Esto puede causar problemas de permisos con muchas otras aplicaciones, por lo que sugeriría no hacerlo. ¿Por qué cambiar una lata de gusanos por otra?
Brad Parks

1
O al menos refínelo a / usr / local / lib / node_modules.
Ken

Esto, esto y más esto. Después de golpearme la cabeza contra la pared, esto funcionó. +1
dashard

Este fue mi problema. En un nuevo macbook (os x 10.10.3), los permisos en / usr / local / lib / node_modules fueron: $ ll / usr / local / lib / node_modules total 0 drwxr-xr-x 3 24561 rueda 102B 31 de marzo 18:19 . drwxrwxr-x 4 24561 admin 136B 31 de marzo 18:19 .. drwxr-xr-x 26 65534 personal 884B 13 de abril 10:53 npm
tkane2000

5

Para Mac (adoptado de la respuesta de Christoper Will)

Mac OS X 10.9.4

  1. Preferencia del sistema> Usuarios y grupos> (desbloquear)> presione +:

    Nueva cuenta> "Grupo"
    Nombre de cuenta : nodegrp

    Después de crear el grupo, marque el usuario que se incluirá en este grupo

  2. 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


1
Tuve que cambiar un par de rutas a / usr / local / bin, pero aparte de eso, esta solución funcionó muy bien en mi máquina OX X 10.9, ¡gracias!
splig

Mala práctica para cambiar la propiedad de los directorios del sistema.
Rich Remer

@richremer Creo que depende de lo que intentes lograr. si el sudoer solo puede acceder a la carpeta, entonces solo se puede cambiar de esta manera. Limitamos el cambio a la carpeta relacionada con npm. ¿Sería más seguro seguir haciendo sudoo cambiar la propiedad del grupo de carpetas para que pueda ser modificado por el usuario normal? Si se supone que el usuario normal no debe realizar ninguna acción en esta carpeta, por supuesto, no debe cambiar la propiedad del grupo de la carpeta.
Ken

Lo apropiado es instalar paquetes globales con sudo, pero hacerlo con la -Hbandera. Específicamente, sudo -H npm install -g <pkg>. Esto garantiza la delineación adecuada de los permisos para el sistema y las carpetas de usuario. Lo que no desea hacer es usar sudo npm install -g, porque esto instala los archivos propiedad de root en su directorio de usuarios. Sería genial si npm fuera lo suficientemente inteligente como para hacer esto de la manera correcta, pero no lo es, por lo que debe usar el -Hindicador de sudo para instalarlo correctamente a nivel mundial.
rico remer

4

En mi caso, es por el permiso de ~ / tmp, así que hago:

sudo chown -R $USER ~/tmp

¡Y esta bien!


4

Para mí, ejecuta solo

sudo chown -R $(whoami) ~/.npm

no funciona Entonces, yo también ejecuto

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!


Eres muy increíble señor :)
user805981

Los archivos en /usr/libson archivos del sistema y no deben ser propiedad de su cuenta de usuario personal.
rico remer

4

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 darle 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 documentos 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 
  1. Haga un directorio para instalaciones globales:

    mkdir ~/.npm-global

  2. Configure npm para usar la nueva ruta del directorio:

    npm config set prefix '~/.npm-global'

  3. Abra o cree un archivo ~/.profileo ~/.bash_profiley agregue esta línea:

    export PATH=~/.npm-global/bin:$PATH

  4. De vuelta en la línea de comando, actualice las variables de su sistema o reinicie el terminal:

    source ~/.profile

  5. (opcional) Prueba: descargue un paquete globalmente sin usar sudo.

    npm install -g jshint


3

En caso sudo chown -R $(whoami) ~/.npm que no funcionó para usted, o necesita una solución de comando no terminal.

El problema es que su cuenta de usuario no tiene permiso de escritura en la carpeta node_modules, por lo que puede hacer lo siguiente

  1. Abra el buscador y presione cmd+ shift+ gesto abrirá ir a la carpeta con url

  2. Escribe la siguiente ruta /usr/local/lib/node_modulesy presiona ir

  3. Haga clic derecho en la node_modulescarpeta y elijaGet Info

  4. Desplácese hacia abajo hasta la sharing & permissionssección

  5. Desbloquee para poder hacer cambios.

  6. Presione +y agregue su cuenta de usuario

  7. Asegúrese de elegir Read & Writeen el menú desplegable privilegio

Ahora debería poder instalar paquetes sin sudoproblemas de permiso y deberían resolverse


3

Problema: no tiene permiso para escribir en los directorios que npm usa para almacenar paquetes y comandos globales.

Solución: permitir permiso para npm.

Abrir 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 permiso SOLO para los directorios necesarios, manteniendo los otros directorios agradables y seguros.


Votación negativa porque establecer la propiedad del usuario de las carpetas del sistema es un antipatrón y esto no tiene en cuenta eso. En el caso especial que npm config get prefixdevuelve algo en la carpeta de inicio, esta solución arreglará los permisos, pero no resuelve el problema subyacente de instalar paquetes globales de manera segura para un entorno compartido.
Rich Remer

Esto reescribirá los permisos de una gran parte del sistema operativo. Ejecutar esto en Ubuntu, por ejemplo, dará como resultado que el comando "sudo" quede inutilizable.
Sahand Seifi

2

Otra gran solución aquí para configurar NPM correctamente, ejecuta los siguientes comandos:

npm config set prefix '~/.npm_packages'
PATH=$PATH:$HOME/.npm_packages/bin; export PATH

2

podrías probar esto, funciona en ubuntu y mac

sudo chown -R $(whoami) /usr/local/lib/node_modules

1
Ejecuté esto y trabajé 100% para mí en un mac: sudo chown -R $ (whoami) / usr / local / lib / node_modules
leeroya

1

Lo que para mí parece ser la mejor opción es la que se sugiere en la documentación de npm , que es verificar primero dónde se instalan los módulos_nodo globales de forma predeterminada ejecutando npm config get prefix. Si obtiene, como lo hago en Trusty, /usres posible que desee cambiarlo a una carpeta que pueda tener de forma segura sin estropear las cosas como lo hice yo.

Para hacer eso, elija o cree una nueva carpeta en su sistema. Es posible que desee tenerlo en su directorio de inicio o, como yo, bajo /usr/localconsistencia porque también soy un usuario de Mac (prefiero no tener que buscar en diferentes lugares dependiendo de la máquina en la que me encuentre). Otra buena razón para hacerlo es el hecho de que la /usr/localcarpeta probablemente ya esté en su RUTA (a menos que quiera jugar con su RUTA), pero es probable que su carpeta recién creada no lo esté y necesitaría agregarla a la carpeta RUTA en su archivo .bash-profile o .bashrc .

En pocas palabras, cambié la ubicación predeterminada de los módulos globales con npm config set prefix '/usr/local', creé la carpeta /usr/local/lib/node_modules(será utilizada por npm) y cambié los permisos para las carpetas utilizadas por npm con el comando:

sudo chown -R $(whoami) $(npm config get prefix)/{lib/node_modules,bin,share}

Ahora puede instalar globalmente cualquier módulo de forma segura. ¡Espero que esto ayude!


1

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 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 cualquier instalación / actualización de npm que necesite

1

La mejor solución sería la que es proporcionada por la documentación de la NPM.


Para Ubuntu, la solución sugerida es la Opción # 2

Breves pasos:
Cree un directorio para instalaciones globales:
mkdir ~/.npm-global

Configure npm para usar la nueva ruta del directorio: puede ayudarlo a verificar si el prefijo se actualizó o no. El resultado sería <Your Home Directory> /. Npm-global
npm config set prefix '~/.npm-global'
npm config get prefix

Abra o cree un archivo ~ / .profile y agregue esta línea:
export PATH=~/.npm-global/bin:$PATH

De vuelta en la línea de comando, actualice las variables de su sistema:
source ~/.profile

En lugar de los pasos 2-4, también puede usar la variable ENV correspondiente (por ejemplo, si no desea modificar ~ / .profile):

NPM_CONFIG_PREFIX=~/.npm-global


Para Mac, la solución sugerida es la Opción # 3

En Mac OS puede evitar este problema por completo utilizando el administrador de paquetes Homebrew

brew install node


Este NPM_CONFIG_PREFIX no funcionará. Este es un error en npm-descriptiton. Vea mi publicación anterior, cómo hacerlo de la manera correcta: stackoverflow.com/a/41395398/1256697
suther

1

Lo resuelvo cambiando el propietario de root a mi nombre de usuario

sudo chown -R me:me /home/me/.config/configstore/

cámbiame con tu nombre de usuario y grupo.


1

Me gusta usar grupos de ubuntu para lograr esto en lugar de cambiar de propietario. Es bastante simple.

  1. Primero instale nodejs y npm usando apt-get

    sudo apt-get update && sudo apt-get install nodejs npm

  2. Averigua quién está conectado, es decir, nombre de usuario, ejecuta el siguiente comando para verlo en la terminal

    whoami

  3. Puede ver la lista de grupos que le asignaron usando un comando muy simple, normalmente el primer grupo es su nombre de usuario.

    groups

  4. Ejecute siguiente para permitir el acceso al usuario conectado

    sudo chmod 777 -R /usr/local && sudo chgrp $(whoami) -R /usr/local

  5. Actualizar npm y nodejs

    npm install -g npm

Estás listo, tu usuario puede ejecutar comandos npm sin sudo

También puede consultar este enlace https://askubuntu.com/a/1115373/687804


0

En Mac OS X, cuando se instala con Homebrew brew install npm , la ruta de instalación es /usr/local/share/npm/con ambas bin/y lib/node_modules/subcarpetas.

Ejecutar este comando para cambiar de propietario a su usuario actualmente conectado debe arreglarlo todo y permitirle instalar paquetes globales de NPM sin él sudo.

sudo chown -R $USER ~/.npm /usr/local/share/npm/


1
Hoy en día recomendaría mi otra respuesta a esta pregunta que utiliza en su npm configlugar.
Joel Purra

0

En realidad, también estaba teniendo el mismo problema. Estaba ejecutando Ubuntu. El problema mío surge porque había perdido mi clave pública de Ubuntu. Incluso la actualización de mi sistema no estaba sucediendo. Estaba dando error GPG. En ese caso, puede recuperar su clave utilizando este comando:

sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys <key in GPG error>

¡Después de eso, npm funciona bien!


0

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:

  1. Use brew para instalar el nodo sin npm
  2. Actualice su .bash_profile / .bashrc para que npm y node sepan dónde instalar y encontrar paquetes
  3. Use brew para actualizar el nodo y npm para actualizarse

Espero que esto ayude a los curiosos!


0

Esta es la solución que utilicé y trabajé. Traté de utilizar whoaminunca 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


0

La respuesta de @Yves M. fue muy similar a mi solución. Aquí están los comandos que usé, que eran ligeramente diferentes de los suyos.

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

Luego consulte la última versión:

nvm ls-remote

Luego instale la versión más nueva:

nvm install YOUR_VERSION_HERE

ejemplo

nvm install v5.8.0
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.