Error: EACCES: permiso denegado, acceso '/ usr / local / lib / node_modules' reacciona

298

¿Qué podría estar causando el error Error: EACCES: permission denied, access '/usr/local/lib/node_modules'?

npm ERR! path /usr/local/lib/node_modules
npm ERR! code EACCES
npm ERR! errno -13
npm ERR! syscall access
npm ERR! Error: EACCES: permission denied, access '/usr/local/lib/node_modules'
npm ERR!  { Error: EACCES: permission denied, access '/usr/local/lib/node_modules'
npm ERR!   errno: -13,
npm ERR!   code: 'EACCES',
npm ERR!   syscall: 'access',
npm ERR!   path: '/usr/local/lib/node_modules' }
npm ERR! 
npm ERR! Please try running this command again as root/Administrator.

npm ERR! A complete log of this run can be found in:
npm ERR!     /Users/macbookmd101/.npm/_logs/2018-02-21T16_26_08_421Z-debug.log
hendra dedi
fuente
9
Consulte la guía oficial de NPM sobre cómo resolver esto: docs.npmjs.com/…
Dzhuneyt

Respuestas:

487

cambia los permisos de tu archivo ... así

primero verifique quién posee el directorio

ls -la /usr/local/lib/node_modules

está negando el acceso porque la carpeta node_module es propiedad de root

drwxr-xr-x   3 root    wheel  102 Jun 24 23:24 node_modules

así que esto debe cambiarse cambiando la raíz a su usuario, pero primero ejecute el siguiente comando para verificar su usuario actual ¿Cómo obtengo el nombre del usuario activo a través de la línea de comando en OS X?

id -un

O

whoami

luego cambia de dueño

sudo chown -R [owner]:[owner] /usr/local/lib/node_modules

O

sudo chown -R ownerName: /usr/local/lib/node_modules

O

sudo chown -R $USER /usr/local/lib/node_modules
okandas
fuente
3
Hubo casos en los que agregar sudo en el comando tampoco funcionó. Esto funcionó para mí y debería aceptarse respuesta.
Niroj Shr
1
Mi empresa utiliza el inicio de sesión único de Microsoft Active Directory. Entonces, el nombre del grupo tiene barras y un espacio. Lo que hace que esto sea un poco más difícil de hacer. El comando que usé fue sudo chown -R myuser:Company\\Domain\ Users /usr/local/lib/node_modules. Para enumerar correctamente el nombre del grupo que hice id -gn myuser.
Patrick
44
Esto fue útil, pero cuando ejecuté el comando para cambiar el propietario que obtuve illegal group name. Así que cambié el comando a sudo chown -R ownerName: /usr/local/lib/node_modulesy funcionó.
Midori
44
Aunque esa es la respuesta correcta, me he encontrado con este problema varias veces y la mejor solución es usar nvm. de esta manera no necesitará cambiar el propietario de los archivos usando chown. github.com/nvm-sh/nvm
Roee
1
En lugar de cambiar el permiso, se recomienda en los documentos instalar npm con nvm. Ver stackoverflow.com/a/59575266/2311074
Adam
105

Para minimizar la posibilidad de errores de permisos, puede configurar npm para usar un directorio diferente. En este ejemplo, creará y usará un directorio oculto en su directorio de inicio.

Copia de seguridad de tu computadora. En la línea de comando, en su directorio de inicio, cree un directorio para instalaciones globales:

mkdir ~/.npm-global

Configure npm para usar la nueva ruta del directorio:

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

En su editor de texto preferido, abra o cree un

~/.profile

archivo y agregue esta línea:

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

En la línea de comando, actualice las variables de su sistema:

source ~/.profile

Para probar su nueva configuración, instale un paquete globalmente sin usar sudo

Naveen Raju
fuente
18
Esta es la opción menos destructiva en mi opinión. También se recomienda en el sitio web de npm .
17xande
Alternativamente, si no desea hacerlo npm config set prefix(especialmente si está escribiendo un instalador no root), puede anular la PREFIXvariable env o proporcionar la --prefixopción, ambas equivalentes a npm config set prefix. (no estoy seguro de cuál anula cuál)
SOFe
Esto funcionó perfectamente para mí. En mi opinión, esta respuesta deja menos espacio para errores destructivos y es muy simple de entender e implementar.
clockelliptic
1
¡Esto es lo que estaba buscando! Gracias.
djangodude
Esta es la solución recomendada en realidad, y la mejor a largo plazo.
Al-Mothafar
49

Todo lo que necesita hacer es agregar USUARIO al propietario de / local / lib

sudo chown -R $USER /usr/local/lib
Nizar
fuente
77
Si los futuros lectores no entienden los permisos, consulte la documentación oficial de NPM y corrija el problema correctamente. docs.npmjs.com/… . Específicamente, los futuros lectores probablemente deberían reinstalar npm con un administrador de versión de nodo (recomendado)
ordonezalex
1
Esto es bastante sencillo. También significa que nunca más tendrás que preocuparte por nada en lib; usted posee / usr / local / lib.
Obinna Nnenanya
44
Esta no es una buena solución en absoluto. Al correr por encima, corre chownun alto riesgo de destruir la estructura de permisos de todo su sistema de archivos.
Lars
3
Este comando arruinó todos mis permisos. Necesito recuperar de nuevo todas las cosas.
Azam Alvi
44
Para ser precisos, esto no es agregar un propietario. Esto está cambiando al propietario, que es mucho más destructivo que simplemente agregar , y es casi tan destructivo como sudo chmod -R 777 /.
SOFe
29

intente agregar sudo antes de cualquier comando que esté intentando.

así: sudo npm install

Usar sudo con un comando en Linux / UNIX generalmente eleva sus permisos a niveles de superusuario. En Windows, la cuenta de superusuario generalmente se llama 'Administrador'. En Linux / Unix, la cuenta de superusuario generalmente se denomina 'root'.

El usuario root tiene permiso para acceder, modificar o eliminar casi cualquier archivo en su computadora. Las cuentas de usuario normales pueden acceder, modificar o eliminar muchos menos archivos. Las restricciones en una cuenta normal protegen su computadora de programas o usuarios no autorizados o dañinos. Algunos procesos requieren que realice acciones en archivos o carpetas a los que normalmente no tiene permisos de acceso. Instalar un programa al que todos puedan acceder es una de estas acciones.

En su caso, ejecutar el comando de instalación con sudo le otorga los permisos del superusuario y le permite modificar archivos que su usuario normal no tiene permiso para modificar.

Pradeep Kumar HK
fuente
57
evite usar sudo mientras instala paquetes npm. Cuanto más profundo vayas con ese camino, más difícil será arreglarlo después. Simplemente cambie los permisos a la carpeta npm como se indica en otra respuesta y viva una vida mejor.
Lukas Liesis
2
Eso puede funcionar pero causará problemas continuos con el tiempo. Evite esto si no desea obtener todo tipo de permisos denegados errores. Como denegado a la carpeta de caché npm, denegado para instalar, etc.
Lukas Liesis
1
Esta respuesta debe eliminarse ya que el uso de sudo antes de la instalación de paquetes establece un precedente muy peligroso si el usuario no comprende los permisos. Consulte la primera respuesta en la que cambia la propiedad de la ubicación del nodo central una vez.
SeaWarrior404
19

Intenté la solución de la respuesta dada por @okanda pero no funcionó para mí.

Sin embargo, funcionó perfectamente cuando lo hice para varias carpetas como se menciona en este hilo: https://github.com/angular/angular-cli/issues/9676#issuecomment-464857493

sudo chown -R $USER /usr/local/lib/node_modules/
sudo chown -R $USER /usr/local/bin/
sudo chown -R $USER /usr/local/share/
Quentin
fuente
Gracias, esta respuesta me ayudó. Ubuntu 18.04.3
bakhti_UZB
Tuve otras soluciones que funcionaban antes, pero por alguna razón esta vez me tomó todas estas carpetas de trabajo. Gracias. Mac v 10.15.2
Amir5000
1
¿Es seguro ejecutarlo en el servidor de producción?
Cheezey
16

Al instalar paquetes globales en ubuntu , necesita permisos de escritura especiales mientras escribe en la usr/bincarpeta. Es por razones de seguridad. Entonces, cada vez que instales un paquete global, usa:

sudo npm install -g [package-name]

Para su caso específico, será:

sudo npm install -g typescript
cinobili19
fuente
14

Parece que te encuentras con problemas de permisos. Si está instalando npm-packages, es posible que obtenga un EACCESerror al intentar instalar un paquete globalmente. Esto significa que no tiene permiso para escribir en los directorios que npmutiliza para almacenar paquetes y comandos globales.

Intenta ejecutar comandos: sudo chmod u+x -R 775 ~/.npmy sudo chown $USER -R ~/.npmo simplemente puede ejecutar cualquier npmcomando con sudo, que debe conseguir resolver su problema.

Si está instalando un npm-packagelocal, entonces debe estar en su directorio de proyecto local y puede intentar ejecutar el sudo npm install <pkg-name>comando para instalar el paquete requerido. el propósito de usar sudoes que cambiará sus permisos de propietario para que pueda autorizar a su usuario actual a ejecutar npmcomandos.

Le recomiendo que eche un vistazo a https://docs.npmjs.com/getting-started/fixing-npm-permissions

Suhas Gavad
fuente
10

Estaba tratando de instalar react expo y aparte de sudo tuve que agregar --unsafe-perm

Me gusta esto. Esto resuelve mi problema

sudo npm install -g expo-cli --unsafe-perm
Furquan
fuente
@Furquan, muchas gracias ... Funcionó para mí después de probar diferentes soluciones.
AzeTech
@AzeTech, me alegra que haya ayudado: D
Furquan
9

Si enfrenta este problema en su Mac. Sigue estos pasos

Primero verifique quién es el propietario de este archivo utilizando el siguiente comando

ls -la /usr/local/lib/node_modules

encontrarás un archivo como el siguiente, uno de ellos está debajo

drwxr-xr-x   3 root    wheel  768 May 29 02:21 node_modules

¿Ha notado que el archivo anterior es propio de la raíz, para realizar cambios en el interior, debe cambiar la ruta de acceso del propietario?

puede usar verificar quién es el usuario actual con este comando

id -un (in my case user is yamsol)

y luego puede cambiar llamando a este comando (simplemente reemplace su nombre de usuario con ownerName)

sudo chown -R ownerName: /usr/local/lib/node_modules

en mi caso, como sabes, el usuario es "yamsol" llamaré a este comando de esta manera

sudo chown -R yamsol: /usr/local/lib/node_modules

Eso es.

adnan javed
fuente
8

Tenga cuidado con todas las respuestas que cambian el propietario de todos los directorios en / usr / local. ¡ Básicamente, no ensucie el sistema Linux!

Creo que la mejor manera es usar su propia carpeta para localizar todos los paquetes globales: https://www.competa.com/blog/how-to-run-npm-without-sudo/

angelcervera
fuente
8

Puede instalar npm a través del administrador de versiones de Node o un instalador de Node. En los documentos decía:

No recomendamos usar un instalador de Nodo, ya que el proceso de instalación del Nodo instala npm en un directorio con permisos locales y puede causar errores de permisos cuando ejecuta paquetes npm globalmente.

Dado que tiene el error de permiso , probablemente instaló npm a través de un instalador de Nodo y ahora necesita reinstalarlo con un nvm (administrador de versión de nodo).

Afortunadamente, esto es muy simple. Ni siquiera necesita eliminar su versión actual de npm o Node.js.

Todo lo que necesitas hacer es

  1. Instalar nvm. Para el uso del nodo OSX o Linux:

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

    Esto crea una carpeta nvm en su directorio de inicio.

Luego

  1. Instale npm y node.js a través de nvm. Para hacerlo, solo llame

    nvm install stable

Ahora puede instalar el paquete en todo el mundo sin necesidad de utilizar sudoo cambiar el propietario del node_modulesen usrcarpeta.

Adán
fuente
gracias por la respuesta Adam! ¿me pregunto cuáles podrían ser algunas posibles complicaciones más adelante en el proceso de configuración de compilación / entorno?
吖 奇 说 - 何魏奇 Archy Will He
también para elaborar, para la gente fish, para que funcione correctamente nvm necesita una envoltura de pescado github.com/FabioAntunes/fish-nvm
吖 奇 说 - 何魏奇 Archy Will He
@ 吖 奇 说 ARCHYSHUō Nunca escuché ninguna complicación al instalar el nodo con nvm. Y como lo recomiendan los documentos oficiales, me parece la mejor manera de hacerlo :)
Adam
7

Use este comando para instalar npm como usuario de sudo:

sudo npm install -g create-react-app 

en lugar de npm install -g create-react-a pp.

Nimmi Verma
fuente
citando @ Lukas- usando sudo al instalar paquetes npm. Cuanto más profundo vayas con ese camino, más difícil será arreglarlo después. Simplemente cambie los permisos a la carpeta npm como se indica en otra respuesta y viva una vida mejor.
सत्यमेव जयते
6

Pude solucionar el problema usando lo siguiente en mac.

sudo npm install -g @aws-amplify/cli --unsafe-perm=true
posha
fuente
6

Para usuarios nvm

sudo chown -R $USER /home/bereket/.nvm/versions/node/v8.9.1/lib/node_modules 

y

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

reemplace v8.9.1con su versión de nodo que está utilizando.

bereket gebredingle
fuente
¡Esto no me funcionó! Aún aparece el error: npm ERR! Error: EACCES: permiso denegado, renombrar /home/samuel/.nvm/versions/node/v8.10.0/lib/node_modules/.staging/npm-90fab7c7/node_modules/columnify/node_modules/wcwidth/node_modules/defaults Parece ser algo con /.staging ... esa carpeta no existe después del intento de instalación. ¿Me puede ayudar con eso?
Samuel
@Samuel, ¿ejecutaste este comando? sudo chown -R $USER home/samuel/.nvm/versions/node/v8.10.0/lib/node_modules
bereket gebredingle
5

Parece que intentó instalar un paquete npm globalmente en lugar de localmente, como se man npm installdescribe a continuación:

El argumento -g o --global hará que npm instale el paquete globalmente en lugar de localmente.

Generalmente, cuando está configurando un proyecto npm (entre muchos otros que podría tener), no es una buena idea instalar paquetes en los módulos globales de Node.js (/ usr / local / lib / node_modules), como su registro de depuración sugirió.

En lugar de usar -g, use --save, que guardará automáticamente el paquete como una dependencia para su package.jsonarchivo:

Me gusta esto:

$ npm install express-generator --save

$ cat package.json 
{
  "name": "first_app_generator",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
},
  "author": "ivanleoncz",
  "license": "MIT",
  "dependencies": {
    "express-generator": "^4.16.0"
  }
}

Pero como se mencionó en las otras respuestas, si va a usar -g, debe usar sudo( si su usuario tiene privilegios de sudo: vea / etc / sudoers ) al realizar npm install express-generator -g, pero de hecho, no es una buena idea, posiblemente causando problemas de permisos.

AVISO

Hay instrucciones para instalar express-generatorcon la -gopción, para tener el script express-cli.jsdisponible en la ruta del sistema, pero también puede usar el script instalado localmente, ubicado en el node_modulesproyecto if npm:

$ ./node_modules/express-generator/bin/express-cli.js --view=pug myapp

Si aparece un mensaje como / usr / bin / env: 'nodo': no aparece dicho archivo o directorio , instale nodejs-legacy(Debian / Ubuntu)

En mi humilde opinión, usar -g(también usar sudo) es como hic sunt dracones , si no estás seguro de las consecuencias.

Para mayor información:

ivanleoncz
fuente
4

Esto ocurrió como resultado de npmno poder acceder a su node_modulesdirectorio global localmente, ejecutando

sudo chown -R Name: /usr/local/lib/node_modules

p.ej

sudo chown -R developerayo: /usr/local/lib/node_modules

soluciona el problema, ahora puede ejecutar el comando que ejecutó nuevamente.

Shodipo Ayomide
fuente
3

Simplemente puede cambiar el propietario o simplemente usar sudo antes de ordenar así

sudo chown -R [owner]:[owner] /usr/local/lib/node_modules( cambiar de propietario )

o

sudo npm install -g json-server

Eso es.

Shahid jafrey
fuente
3

Para linux / ubuntu si el comando

npm install -g <package_name>

npm WARN deprecated superagent@4.1.0: Please note that v5.0.1+ of superagent removes User-Agent header by default, therefore you may need to add it yourself (e.g. GitHub blocks requests without a User-Agent header).  This notice will go away with v5.0.2+ once it is released.

npm ERR! path ../lib/node_modules/<package_name>/bin/..

npm ERR! code EACCES

npm ERR! errno -13

npm ERR! syscall symlink

npm ERR! Error: EACCES: permission denied, symlink '../lib/node_modules
/<package_name>/bin/..' -> '/usr/local/bin/<package_name>'

npm ERR!  { [Error: EACCES: permission denied, symlink '../lib/node_modules/<package_name>/bin/..' -> '/usr/local/bin/<package_name>']

npm ERR!   cause:
npm ERR!    { Error: EACCES: permission denied, symlink '../lib/node_modules/<package_name>/bin/..' -> '/usr/local/bin/<package_name>'

npm ERR!      errno: -13,

npm ERR!      code: 'EACCES',

npm ERR!      syscall: 'symlink',

npm ERR!      path: '../lib/node_modules/<package_name>/bin/..',
npm ERR!      dest: '/usr/local/bin/ionic' },

npm ERR!   stack:
npm ERR!    'Error: EACCES: permission denied, symlink \'../lib/node_modules/ionic/bin/ionic\' -> \'/usr/local/bin/ionic\'',

npm ERR!   errno: -13,

npm ERR!   code: 'EACCES',

npm ERR!   syscall: 'symlink',

npm ERR!   path: '../lib/node_modules/<package-name>/bin/<package-name>',

npm ERR!   dest: '/usr/local/bin/<package-name>' }

npm ERR! 

npm ERR! The operation was rejected by your operating system.

npm ERR! It is likely you do not have the permissions to access this file as the current user

npm ERR! 

npm ERR! If you believe this might be a permissions issue, please double-check the

npm ERR! permissions of the file and its containing directories, or try running

npm ERR! the command again as root/Administrator (though this is not recommended).


npm ERR! A complete log of this run can be found in:

npm ERR!     /home/User/.npm/_logs/2019-07-29T01_20_10_566Z-debug.log

Solución: instalar con permisos de root

sudo npm install <package_name> -g

Srilakshmy Krishnan
fuente
3

Necesita el permiso de los niveles de superusuario para instalar React. En Linux / Unix, la cuenta de superusuario generalmente se denomina 'root'.

Para obtener el privilegio de superusuario, simplemente ejecute el siguiente comando en su terminal:

sudo -i

y luego simplemente ejecute el comando para instalar React:

npm install -g create-react-app

Sin embargo, el equipo reactjs nos anima a usar el siguiente comando en lugar de instalar un paquete global.

npx create-react-app app_name
Fatema T. Zuhora
fuente
1
Usar sudo es una propuesta arriesgada, algunos paquetes pueden ser seguros pero otros pueden hacer otra cosa y aprovechar los privilegios de root que está otorgando. sudo ejecuta los comandos posteriores como superusuario
rustyDev
Algunos paquetes como create-react-appnecesitan privilegios de root para instalarse como paquetes globales; de lo contrario, no podrá instalarlo. Sin embargo, el equipo reactjs nos anima a usar el siguiente comando en npx create-react-app app_namelugar de instalar un paquete global.
Fatema T. Zuhora
3

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

cortador de joe
fuente
2

Solo ayudó esto:

sudo chown -R ownerName: /usr/local/lib/node_modules
nicolas asinovich
fuente
2

Después de una larga investigación, entendí que Mac OS no necesita nada para instalar angular cli, solo use sudo npm install -g @angular/clisu terminal y le pedirá que ingrese su contraseña, procederá a instalar cli. Funcionó para mi.

Hemanth Paluri
fuente
2

Si está ejecutando Linux (es decir: Arch)

# npm -g install packageName

Por defecto, este comando instala el paquete en / usr / lib / node_modules / npm y requiere privilegios de root para hacerlo.

Para permitir instalaciones para todo el usuario

Para permitir instalaciones de paquetes globales para el usuario actual, configure la npm_config_prefixvariable de entorno. Esto es utilizado tanto por npm como por hilo.

~/.profile
PATH="$HOME/.node_modules/bin:$PATH"
export npm_config_prefix=~/.node_modules

Vuelva a iniciar sesión o fuente para actualizar los cambios.

También puede especificar el --prefixparámetro para npm install. Sin embargo, esto no se recomienda, ya que deberá agregarlo cada vez que instale un paquete global.

$ npm -g install packageName --prefix ~/.node_modules

Por lo tanto, no tiene que pedir permiso de carpeta

Duy Huy Hoang Do
fuente
1

Pude deshacerme de este problema instalando nvm, luego configurando el nodo a la última versión.

  1. Instalar nvmusando curl(para la última versión, vaya a nvm.sh )
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.34.0/install.sh | bash
  1. Lista de versiones de nodo disponibles
nvm ls

v10.12.0
predeterminado -> v10.12 (-> v10.12.0)
nodo -> estable (-> v10.12.0) (predeterminado)
estable -> 10.12 (-> v10.12.0)
...

  1. Elija qué versión de nodo usar
nvm use v10.12

nvm no es compatible con la opción de "prefijo" de configuración npm: actualmente configurado en ""

  1. Ejecute esto para desactivar la opción:
nvm use --delete-prefix v10.12.0

Después de seguir los comandos anteriores, podrá instalar react / angular en Ubuntu.

VishnuB
fuente
1

Use 'sudo npm install xyz' funcionará.

Sohan
fuente
1

Simplemente agregue "sudo" antes del comando npm. Eso es.

Farrukh Ahmed
fuente
0

He usado sudo, pero no resolvió el problema, lo solucioné cambiando el permiso de la carpeta node_modules,

sudo chmod -R 777 node_modules

Si lo desea, puede reemplazar 777 con cualquier otro código si no establece el permiso para todos los usuarios / grupos.

coder618
fuente
0

Para aquellos de ustedes que aún no pueden solucionar el problema después de usar las soluciones mencionadas anteriormente. Prueba esto

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

Eso debería hacer el truco, ¡salud!

dPac
fuente