Errore: EACCES: autorizzazione negata, accesso "/ usr / local / lib / node_modules"


298

Cosa potrebbe causare l'errore 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

9
Consulta la guida ufficiale di NPM su come risolvere questo problema: docs.npmjs.com/…
Dzhuneyt

Risposte:


487

cambia i permessi dei file .. in questo modo

controlla prima chi possiede la directory

ls -la /usr/local/lib/node_modules

sta negando l'accesso perché la cartella node_module è di proprietà di root

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

quindi questo deve essere cambiato cambiando root per il tuo utente ma prima esegui il comando qui sotto per controllare il tuo attuale utente Come posso ottenere il nome dell'utente attivo tramite la riga di comando in OS X?

id -un

O

whoami

quindi cambia proprietario

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

3
Ci sono stati casi in cui anche l'aggiunta di sudo al comando non ha funzionato. Questo ha funzionato per me e dovrebbe essere accettata la risposta.
Niroj Shr,

1
La mia azienda utilizza Single Sign-On di Microsoft Active Directory. Quindi il nome del gruppo contiene delle barre e uno spazio. Il che rende questo un po 'più difficile da fare. Il comando che ho usato è stato sudo chown -R myuser:Company\\Domain\ Users /usr/local/lib/node_modules. Per elencare correttamente il nome del gruppo che ho fatto id -gn myuser.
Patrick

44
Questo è stato utile, ma quando ho eseguito il comando per cambiare il proprietario ho ottenuto illegal group name. Quindi ho cambiato il comando in sudo chown -R ownerName: /usr/local/lib/node_modulese ha funzionato.
Midori

4
Sebbene sia la risposta giusta, ho riscontrato questo problema più volte e la soluzione migliore è utilizzare nvm. in questo modo non sarà necessario modificare il proprietario dei file utilizzando chown. github.com/nvm-sh/nvm
Roee,

1
Invece di modificare l'autorizzazione, si consiglia nei documenti di installare npm con nvm. Vedi stackoverflow.com/a/59575266/2311074
Adam

105

Per ridurre al minimo la possibilità di errori di autorizzazione, è possibile configurare npm per utilizzare una directory diversa. In questo esempio, creerai e utilizzerai una directory nascosta nella tua home directory.

Eseguire il backup del computer. Nella riga di comando, nella tua home directory, crea una directory per installazioni globali:

mkdir ~/.npm-global

Configurare npm per utilizzare il nuovo percorso della directory:

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

Nel tuo editor di testo preferito, apri o crea un

~/.profile

file e aggiungi questa riga:

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

Sulla riga di comando, aggiorna le variabili di sistema:

source ~/.profile

Per testare la tua nuova configurazione, installa un pacchetto a livello globale senza usare sudo


18
Questa è l'opzione meno distruttiva secondo me. È anche raccomandato nel sito Web npm .
17xande,

In alternativa, se non vuoi farlo npm config set prefix(specialmente se stai scrivendo un programma di installazione non root), potresti voler sovrascrivere PREFIXenv var o fornire l' --prefixopzione, entrambe equivalenti a npm config set prefix. (non so quale sostituisca quale)
SOFe

Ha funzionato perfettamente per me. A mio avviso, questa risposta crea il minimo spazio per errori distruttivi ed è molto semplice da capire e attuare.
Clockelliptic

1
Questo è ciò che cercava! Grazie.
Djangodude,

Questa è in realtà la soluzione raccomandata e la migliore a lungo termine.
Al-Mothafar,

49

Tutto quello che devi fare è aggiungere USER al proprietario di / local / lib

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

7
Se i futuri lettori non comprendono le autorizzazioni, fare riferimento alla documentazione ufficiale NPM e correggere correttamente il problema. docs.npmjs.com/… . In particolare, i futuri lettori dovrebbero probabilmente reinstallare npm con un gestore versione nodo (consigliato)
ordonezalex,

1
Questo è piuttosto semplice. Significa anche che non dovrai mai più preoccuparti di nulla in lib; possiedi / usr / local / lib.
Obinna Nnenanya,

4
Questa non è affatto una buona soluzione. Se corri sopra, chownsei ad alto rischio di distruggere la struttura dei permessi dell'intero filesystem.
Lars,

3
Questo comando ha rovinato tutte le mie autorizzazioni. Devo recuperare di nuovo tutte le cose.
Azam Alvi,

4
Per essere precisi, questo non sta aggiungendo un proprietario. Questo sta cambiando il proprietario, che è molto più distruttivo della semplice aggiunta ed è quasi altrettanto distruttivo sudo chmod -R 777 /.
SOF

29

prova ad aggiungere sudo prima di qualunque comando tu stia provando.

in questo modo: sudo npm install

L'uso di sudo con un comando in Linux / UNIX generalmente porta le tue autorizzazioni a livelli di superutente. In Windows, l'account superutente viene generalmente chiamato "Amministratore". In Linux / Unix l'account superutente è generalmente chiamato 'root'.

L'utente root ha il permesso di accedere, modificare o eliminare quasi tutti i file sul tuo computer. I normali account utente possono accedere, modificare o eliminare molti meno file. Le restrizioni su un account normale proteggono il computer da programmi o utenti non autorizzati o dannosi. Alcuni processi richiedono l'esecuzione di azioni su file o cartelle a cui normalmente non si dispone delle autorizzazioni per l'accesso. L'installazione di un programma a cui tutti possono accedere è una di queste azioni.

Nel tuo caso, l'esecuzione del comando di installazione con sudo ti dà le autorizzazioni del superutente e ti consente di modificare i file che l'utente normale non ha i permessi di modifica.


57
evitare di usare sudo durante l'installazione di pacchetti npm. Più in profondità si procede con tale percorso, più sarà difficile correggerlo in seguito. Basta cambiare i permessi nella cartella npm come indicato in un'altra risposta e vivere una vita migliore.
Lukas Liesis,

2
Potrebbe funzionare ma causerà problemi continui nel tempo. Evitatelo se non volete ottenere errori negati su tutti i tipi di autorizzazione. Come negato nella cartella cache npm, negato per l'installazione e così via.
Lukas Liesis,

1
Questa risposta dovrebbe essere rimossa poiché l'uso di sudo prima dell'installazione dei pacchetti costituisce un precedente molto pericoloso se l'utente non capisce le autorizzazioni. Fare riferimento alla prima risposta in cui si modifica una volta la proprietà della posizione del nodo principale.
SeaWarrior404,

19

Ho provato la soluzione della risposta data da @okanda ma non ha funzionato per me.

Tuttavia ha funzionato perfettamente quando l'ho fatto per diverse cartelle come menzionato in questa discussione: 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/

Grazie, questa risposta mi ha aiutato. Ubuntu 18.04.3
bakhti_UZB

Prima avevo altre soluzioni funzionanti, ma per qualche motivo questa volta ci sono voluti tutti questi per far funzionare le cartelle. Grazie. Mac v 10.15.2
Amir5000

1
È sicuro eseguire nel server di produzione?
Cheezey il

16

Durante l'installazione di pacchetti globali in Ubuntu , è necessario disporre di autorizzazioni di scrittura speciali mentre si scrive nella usr/bincartella. È per motivi di sicurezza. Quindi, ogni volta che installi un pacchetto globale, usa:

sudo npm install -g [package-name]

Per il tuo caso specifico, sarà:

sudo npm install -g typescript

14

Sembra che tu abbia riscontrato problemi di autorizzazione. Se si sta eseguendo l'installazione, npm-packagesè possibile che si verifichi un EACCESerrore durante il tentativo di installare un pacchetto a livello globale. Ciò significa che non si dispone dell'autorizzazione per scrivere nelle directory npmutilizzate per archiviare pacchetti e comandi globali.

Prova a eseguire i comandi: sudo chmod u+x -R 775 ~/.npme sudo chown $USER -R ~/.npmoppure puoi semplicemente eseguire qualsiasi npmcomando con sudo, che dovrebbe risolvere il problema.

Se si sta installando un file npm-packagelocale, è necessario trovarsi nella directory del progetto locale e provare a eseguire il sudo npm install <pkg-name>comando per installare il pacchetto richiesto. lo scopo dell'utilizzo sudoè che cambierà le autorizzazioni del proprietario in modo da poter rendere l'utente corrente autorizzato ad eseguire i npmcomandi.

Ti consiglierei di dare un'occhiata a https://docs.npmjs.com/getting-started/fixing-npm-permissions


10

Stavo cercando di installare reagire expo e oltre a sudo ho dovuto aggiungere --unsafe-perm

come questo. Questo risolve il mio problema

sudo npm install -g expo-cli --unsafe-perm

@Furquan, Grazie mille ... Ha funzionato per me dopo aver provato diverse soluzioni.
AzeTech,

@AzeTech, sono felice che abbia aiutato: D
Furquan,

9

Se stai riscontrando questo problema sul tuo Mac. Segui questi passi

Prima controlla chi è il proprietario di questo file usando il comando seguente

ls -la /usr/local/lib/node_modules

troverai alcuni file come sotto uno di questi è sotto

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

hai notato che il file sopra è di proprietà di root, per apportare modifiche al tuo interno devi cambiare la nave del proprietario del percorso.

puoi usare controlla chi è l'utente corrente con questo comando

id -un (in my case user is yamsol)

e quindi puoi cambiare chiamando questo comando (basta sostituire il tuo nome utente con ownerName)

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

nel mio caso come sapete l'utente è "yamsol" chiamerò questo comando in questo modo

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

questo è tutto.



8

È possibile installare npm tramite il gestore versione nodo o un programma di installazione nodo. Nei documenti ha dichiarato:

Non è consigliabile utilizzare un programma di installazione del nodo, poiché il processo di installazione del nodo installa npm in una directory con autorizzazioni locali e può causare errori di autorizzazione quando si eseguono pacchetti npm a livello globale.

Dato che hai l' errore di autorizzazione , probabilmente hai installato npm tramite un programma di installazione Node e ora devi reinstallarlo con un nvm (gestore versione nodo).

Fortunatamente, questo è molto semplice. Non è nemmeno necessario rimuovere la versione corrente di npm o Node.js.

Tutto quello che devi fare è

  1. Installa NVV. Per il nodo OSX o Linux usare:

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

    Questo crea una cartella nvm nella tua home directory.

Poi

  1. Installa npm e node.js tramite nvm. Per fare ciò, basta chiamare

    nvm install stable

Ora è possibile installare il pacchetto di livello globale senza utilizzare sudoo modificare il proprietario di node_modulesin usrcartella.


grazie per la risposta Adam! ti stai solo chiedendo quali potrebbero essere alcune possibili complicazioni in seguito nel processo di configurazione build / environment?
吖 奇 说 - 何魏奇 Archy Will He

anche per elaborare, per le persone fish, al fine di funzionare correttamente nvm ha bisogno di un involucro di pesce github.com/FabioAntunes/fish-nvm
吖 奇 说 - 何魏奇 Archy Will He

@ 吖 奇 说 ARCHYSHUō Non ho mai sentito parlare di complicazioni durante l'installazione del nodo con nvm. E poiché è consigliato dai documenti ufficiali, mi sembra il modo migliore per andare :)
Adam

7

Utilizzare questo comando per installare npm come utente sudo:

sudo npm install -g create-react-app 

invece di npm install -g create -eag-a pp.


citando @ Lukas- usando sudo durante l'installazione di pacchetti npm. Più in profondità si procede con tale percorso, più sarà difficile correggerlo in seguito. Basta cambiare i permessi nella cartella npm come indicato in un'altra risposta e vivere una vita migliore.
यमेव्यमेव जयते

6

Sono stato in grado di risolvere il problema utilizzando quanto segue in Mac.

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

6

Per utenti nvm

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

e

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

sostituire v8.9.1con la versione del nodo che si sta utilizzando.


Questo non ha funzionato per me! Ancora visualizzato l'errore: npm ERR! Errore: EACCES: autorizzazione negata, rinomina /home/samuel/.nvm/versions/node/v8.10.0/lib/node_modules/.staging/npm-90fab7c7/node_modules/columnify/node_modules/wcwidth/node_modules/defaults Sembra essere qualcosa con /.staging ..quella cartella non esiste dopo il tentativo di installazione. Potete aiutarmi con quello?
Samuel,

@Samuel hai eseguito questo comando? sudo chown -R $USER home/samuel/.nvm/versions/node/v8.10.0/lib/node_modules
bereket gebredingle,

5

Sembra che tu abbia tentato di installare un pacchetto npm a livello globale anziché locale, come man npm installdescritto:

L' argomento -g o --global farà sì che npm installi il pacchetto a livello globale anziché locale.

In genere, quando si configura un progetto npm (tra molti altri che si potrebbero avere), non è una buona idea installare pacchetti sui moduli globali Node.js (/ usr / local / lib / node_modules), come log di debug suggerito.

Invece di usare -g, usa --save, che salverà automaticamente il pacchetto come dipendenza per il tuo package.jsonfile:

Come questo:

$ 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"
  }
}

Ma come menzionato nelle altre risposte, se hai intenzione di usare -g, devi usare sudo( se il tuo utente ha i privilegi di sudo: vedi / etc / sudoers ) durante l'esecuzione npm install express-generator -g, ma in effetti non è una buona idea, probabilmente causando problemi di autorizzazione.

AVVISO

Ci sono istruzioni per l'installazione express-generatorcon -gopzione, al fine di avere lo script express-cli.jsdisponibile sul percorso del sistema, ma puoi usare anche lo script installato localmente, situato nel node_modulescaso in cui il tuo progetto npm:

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

Se viene visualizzato un messaggio come / usr / bin / env: 'nodo': nessun file o directory simile , installa nodejs-legacy(Debian / Ubuntu)

IMHO, usare -g(anche usando sudo) è come hic sunt dracones , se non si è sicuri delle conseguenze.

Per maggiori informazioni:


4

Ciò si è verificato a causa del npmmancato accesso node_moduleslocale alla directory globale , in esecuzione

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

per esempio

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

risolve il problema, ora è possibile eseguire nuovamente il comando eseguito.


3

Puoi semplicemente cambiare il proprietario o semplicemente usare sudo prima di comandare in questo modo

sudo chown -R [owner]:[owner] /usr/local/lib/node_modules( cambia proprietario )

o

sudo npm install -g json-server

questo è tutto.


3

Per Linux / Ubuntu se il 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

Correzione: installazione con permessi di root

sudo npm install <package_name> -g


3

È necessaria l'autorizzazione dei livelli di superutente per installare React. In Linux / Unix l'account superutente è generalmente chiamato 'root'.

Per ottenere il privilegio di superutente basta eseguire il seguente comando sul terminale:

sudo -i

e quindi esegui semplicemente il comando per installare React:

npm install -g create-react-app

Tuttavia, il team di reagenti ci incoraggia a utilizzare il seguente comando invece di installare un pacchetto globale.

npx create-react-app app_name

1
L'uso di sudo è una proposta rischiosa, alcuni pacchetti potrebbero essere sicuri, ma altri potrebbero iniziare a fare qualcos'altro e trarre vantaggio dai privilegi di root che stai concedendo. sudo esegue i seguenti comandi come superutente
rustyDev il

Alcuni pacchetti come create-react-appi privilegi di root devono essere installati come pacchetti globali; in caso contrario, non sarà possibile installarlo. Tuttavia, il team di reagenti ci incoraggia a utilizzare il seguente comando npx create-react-app app_nameinvece di installare un pacchetto globale.
Fatema T. Zuhora il



2

Dopo una lunga ricerca ho capito che non è necessario nulla per mac OS per installare il client angolare, basta usare sudo npm install -g @angular/cliil terminale per inserire la password, procedere con l'installazione del client. Ha funzionato per me.



2

Se stai usando Linux (es: Arch)

# npm -g install packageName

Per impostazione predefinita, questo comando installa il pacchetto in / usr / lib / node_modules / npm e richiede i privilegi di root per farlo.

Consentire installazioni a livello di utente

Per consentire l'installazione di pacchetti globali per l'utente corrente, impostare la npm_config_prefixvariabile di ambiente. Questo è usato sia da npm che da filati.

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

Effettua nuovamente il login o l'origine per aggiornare le modifiche.

È inoltre possibile specificare il --prefixparametro per npm install. Tuttavia, questo non è raccomandato, poiché è necessario aggiungerlo ogni volta che si installa un pacchetto globale.

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

Quindi non devi chown permision cartella


1

Sono stato in grado di sbarazzarmi di questo problema installando nvm, quindi impostando il nodo sull'ultima versione.

  1. Installa nvmusando curl(per l'ultima versione vai a nvm.sh )
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.34.0/install.sh | bash
  1. Elenca le versioni dei nodi disponibili
nvm ls

v10.12.0
predefinito -> nodo v10.12 (-> v10.12.0)
-> stabile (-> v10.12.0) (predefinito)
stabile -> 10.12 (-> v10.12.0)
...

  1. Scegli quale versione del nodo utilizzare
nvm use v10.12

nvm non è compatibile con l'opzione "prefisso" di npm config: attualmente impostato su ""

  1. Esegui questo per deselezionare l'opzione:
nvm use --delete-prefix v10.12.0

Dopo aver seguito i comandi sopra, sarai in grado di installare reattivo / angolare in Ubuntu.




0

Ho usato sudo, ma non ha risolto il problema, ho risolto il problema modificando l'autorizzazione della cartella node_modules,

sudo chmod -R 777 node_modules

Se lo desideri, puoi sostituire 777 con qualsiasi altro codice se non imposti l'autorizzazione per tutti gli utenti / gruppi.


0

Per quelli di voi ancora incapaci di risolvere il problema dopo aver utilizzato le soluzioni sopra menzionate. Prova questo

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

Questo dovrebbe fare il trucco, evviva!

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.