risposta-alla-domanda-sullo-sviluppo-web-bd.com

npm genera un errore senza sudo

Ho appena installato node e npm tramite il pacchetto su nodejs.org e ogni volta che provo a cercare o installare qualcosa con npm, lancia il seguente errore, a meno che non eseguo il comando Sudo. Ho la sensazione che questo sia un problema di permessi? Sono già l'amministratore.

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
1082
Chad

Questo sembra un problema di permessi nella tua home directory. Per recuperare la proprietà della directory .npm eseguire:

Sudo chown -R $(whoami) ~/.npm
1955
Noah

Le autorizzazioni che hai usato durante l'installazione di Node saranno richieste quando fai cose come scrivere nella tua directory npm (npm link, npm install -g, ecc.).

Probabilmente hai eseguito l'installazione del nodo con i permessi di root, ecco perché l'installazione del pacchetto globale ti chiede di essere root.


Soluzione 1: NVM

Non modificare le autorizzazioni, installa il nodo nel modo giusto.

Su una macchina di sviluppo, non dovresti installare ed eseguire il nodo con i permessi di root, altrimenti cose come npm link, npm install -g avranno bisogno delle stesse autorizzazioni.

NVM (Node Version Manager) ti permette di installare il Nodo senza permessi di root e ti permette anche di installare molte versioni di Node per giocare facilmente con loro .. Perfetto per lo sviluppo.

  1. Nodo di disinstallazione (probabilmente sarà richiesto il permesso root). Questo potrebbe aiutarti.
  2. Quindi installa NVM seguendo le istruzioni in questa pagina .
  3. Installa il nodo tramite NVM: nvm install node

Ora npm link, npm install -g non richiederà più di essere root.

Modifica: vedere anche https://docs.npmjs.com/getting-started/fixing-npm-permissions


Soluzione 2: installare i pacchetti globalmente per un dato utente

Non modificare le autorizzazioni, installa i pacchetti npm globalmente nel modo giusto.

Se sei su OSX o Linux, puoi creare una directory dedicata all'utente per il tuo pacchetto globale e configurare npm e node per sapere come trovare pacchetti installati globalmente.

Controlla questo grande articolo per le istruzioni passo passo sull'installazione di moduli npm globalmente senza Sudo.

Vedi anche: documentazione di npm su Risolvere i permessi di npm .

519
Yves M.

Inoltre avrai bisogno dell'autorizzazione alla scrittura nella directory node_modules

Sudo chown -R $USER /usr/local/lib/node_modules
382
Xilo

L'ho riscontrato durante l'installazione di Recess ( https://github.com/Twitter/recess ) per compilare il mio CSS per Bootstrap 3.

Durante l'installazione della rientranza:

-npm install recess -g
  1. Devi sbloccare le autorizzazioni nella tua directory home, come Noah Dice:

    Sudo chown -R `whoami` ~/.npm
    
  2. Hai anche bisogno di permessi di scrittura nella directory node_modules, come Xilo Dice, quindi se ancora non funziona, prova:

    Sudo chown -R `whoami` /usr/local/lib/node_modules
    
  3. Se vedi ancora degli errori, potresti anche aver bisogno di correggere /usr/local permessi :

    Sudo chown -R `whoami` /usr/local
    

Si noti che come indicato in questo post/usr/local/ non è in realtà una directory di sistema se si è su un Mac, quindi questa risposta è in realtà perfettamente "sicura" per gli utenti Mac. Tuttavia, se si è su Linux, vedere (Christopher Will 's risposta in basso per una soluzione multi-user friendly, sistema dir-safe (ma più complesso). 

54
danomarr

Cambiare il proprietario nelle cartelle "system-global" è un hack. In una nuova installazione, configurerei NPM per utilizzare una posizione già scrivibile per i programmi "user-global":

npm config set prefix ~/npm

Quindi assicurati di aggiungere quella cartella al tuo percorso:

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

Vedi @ErikAndreas ' answer to I moduli NPM non verranno installati globalmente senza Sudo e guida passo-passo più lunga da @sindresorhus con anche imposta $MANPATH.

54
Joel Purra

Altre risposte suggeriscono di cambiare proprietà o autorizzazioni delle directory di sistema a un utente specifico. Sconsiglio fortemente di farlo, questo può diventare molto imbarazzante e potrebbe rovinare l'intero sistema! 

Ecco un approccio più generico e più sicuro che supporta anche multiutente.

Crea un nuovo gruppo per gli utenti del nodo e aggiungi gli utenti richiesti a questo gruppo. Quindi imposta la proprietà dei file/directory dipendenti dal nodo in questo gruppo.

# 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.)

Ora puoi facilmente installare i tuoi moduli come utente

npm install -g generator-angular

Alcuni moduli (grunt, bower, yo ecc.) Dovranno ancora essere installati come root. Questo perché creano collegamenti simbolici in/user/bin /.

Modificare

3 anni dopo raccomanderei di usare Node Version Manager . Ti dà un sacco di tempo e problemi.

35

Attento!!! Attento!!! Attento!!!  

chown o chmod èNONla soluzione, a causa del rischio per la sicurezza.

Invece fai questo, fai:

Prima verifica, dove punta npm, se chiami:

npm config get prefix

Se viene restituito/usr, puoi fare quanto segue:

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

Questo crea un nkt-Direktory nella tua Home-Directory e punta npm ad esso.

Per ottenere queste modifiche permanenti, devi aggiungere il comando export al tuo .bashrc:

echo -e "export NPM_CONFIG_PREFIX=~/.npm-global\nexport PATH=$PATH:~/.npm-global/bin" >> ~/.bashrc
22
suther

La documentazione ufficiale su come risolvere le autorizzazioni npm install con un errore EACCES si trova in https://docs.npmjs.com/getting-started/fixing-npm-permissions

Ho riscontrato questo problema dopo una nuova installazione del nodo utilizzando l'installer .pkg su OSX. Ci sono alcune ottime risposte qui, ma non ho ancora visto un link a npmjs.com.

Opzione 1: modifica dell'autorizzazione alla directory predefinita di npm

  1. Trova il percorso per la directory di npm:

    npm config get prefix
    

Per molti sistemi, questo sarà / usr/local.

WARNING: se il percorso visualizzato è solo / usr, passare a Opzione 2.

  1. Cambia il proprietario delle directory di npm al nome dell'utente corrente (il tuo nome utente!):

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

    Questo modifica le autorizzazioni delle sottocartelle utilizzate da npm e alcuni altri strumenti (lib/node_modules, bin e share).

Opzione 2: modifica la directory predefinita di npm in un'altra directory

A volte non si desidera modificare la proprietà della directory predefinita utilizzata da npm (ad es. / Usr) poiché ciò potrebbe causare alcuni problemi, ad esempio se si condivide il sistema con altri utenti.

Invece, è possibile configurare npm per utilizzare una directory diversa del tutto. Nel nostro caso, questa sarà una directory nascosta nella nostra cartella Inizio.

  1. Crea una directory per le installazioni globali:

    mkdir ~/.npm-global
    
  2. Configura npm per utilizzare il nuovo percorso di directory:

    npm config set prefix '~/.npm-global'
    
  3. Apri o crea un file ~/.profile e aggiungi questa riga:

    export PATH=~/.npm-global/bin:$PATH
    
  4. Torna alla riga di comando, aggiorna le tue variabili di sistema:

    source ~/.profile
    
15
HoppyKamper

Come se avessimo bisogno di più risposte qui, ma comunque ..

Sindre Sorus ha una guida Installa i pacchetti npm globalmente senza Sudo su OS X e Linux descrivendo come installare in modo pulito senza problemi con le autorizzazioni: 

Ecco un modo per installare pacchetti globalmente per un determinato utente.

  1. Crea una directory per i tuoi pacchetti globali

    mkdir "${HOME}/.npm-packages"
    
  2. Fai riferimento a questa directory per utilizzi futuri nel tuo .bashrc/.zshrc:

    NPM_PACKAGES="${HOME}/.npm-packages"
    
  3. Indicare a npm dove memorizzare il pacchetto installato globalmente. Nel tuo file $HOME/.npmrc aggiungi:

    prefix=${HOME}/.npm-packages
    
  4. Accertati che il nodo li trovi. Aggiungi quanto segue al tuo .bashrc/.zshrc:

    NODE_PATH="$NPM_PACKAGES/lib/node_modules:$NODE_PATH"
    
  5. Assicurati di trovare i binari e le pagine man installate. Aggiungi quanto segue al tuo .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)"
    

Controlla npm-g_nosudo per eseguire automaticamente i passaggi precedenti

_/Verifica il fonte di questa guida per gli ultimi aggiornamenti.

11
ptim

Quando esegui npm install -g somepackage, potresti ricevere un errore EACCES chiedendoti di eseguire nuovamente il comando come root/amministratore. È un problema di autorizzazioni.

È facile da risolvere, apri il tuo terminale (Applicazioni> Utilità> Terminale)

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

** Ti consiglio vivamente di non utilizzare la gestione dei pacchetti con Sudo (Sudo npm -g installa qualcosa), perché puoi ottenere alcuni problemi più tardi **

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

8

TL; DR

usa sempre Sudo -i o Sudo -H quando esegui npm install per installare pacchetti globali.

-

Quando usi npm, scarica i pacchetti nella tua home directory dell'utente. Quando si esegue come Sudo, npm installa i file nella stessa directory, ma ora sono di proprietà di root.

Quindi questo è ciò che accade assolutamente ad ogni singola persona che abbia mai usato npm:

  • installa alcuni pacchetti locali senza problemi usando npm install foo
  • installa il pacchetto globale usando Sudo install -g foo-cli senza problemi
  • tenta di installare il pacchetto locale con npm install bar
  • si sentono frustrati dai progettisti npm ora che devi tornare a chmod una directory

Quando usi l'opzione -i o -H con Sudo, la tua home directory sarà la home directory root. Qualsiasi installazione globale memorizzerà i pacchetti in /root/.npm invece di root- file di proprietà su /home/me/.npm.

Usa sempre Sudo -i o Sudo -H quando esegui npm install per installare pacchetti globali e i tuoi problemi di permessi npm si scioglieranno.

Per sempre.

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

--q.v. la risposta accettata per correggere un npm già fottuto.

8
rich remer

Per Mac (adottato dalla risposta di Christoper Will)

Mac OS X 10.9.4 

  1. Preferenze di sistema> Utenti e gruppi> (sblocco)> premere +: 

    Nuovo account> "Gruppo"
    Nome account: nodegrp 

    Dopo aver creato il gruppo, selezionare l'utente da includere in questo gruppo

  2. Sudo chgrp -R nodegrp/usr/local/lib/node_modules /
    Sudo chgrp nodegrp/usr/bin/node
    Sudo chgrp nodegrp/usr/bin/npm
    Chown Sudo -R $ (whoami): nodegrp ~/.npm

6
ken

Nel mio caso, è a causa del permesso di ~/tmp. Così faccio:

Sudo chown -R $USER ~/tmp

Ed è OK!

5
bnPYSse

Ho avuto un problema simile a I moduli NPM non verranno installati globalmente senza Sudo , il problema era che quando ho installato il nodo l'ho fatto con Sudo tramite chris/lea ppa repo.

La mia soluzione era disinstallare il nodo e installarlo in questo modo:

Scarica le ultime fonti di nodi stabili da nodejs.org # nel mio caso node-v0.10.20.tar.gz

sorgenti tar -zxf node-v0.10.20.tar.gz #uncompress

cd node-v0.10.20 #enter cartella non compressa

Chown Sudo $ USER -R/usr/local

./configure --prefix =/usr/local && make && make install

PD: se non vuoi cambiare la proprietà della cartella/usr/local, puoi installarla da qualche parte già in tuo possesso. Il problema di questo approccio è che dovrai collegare la cartella di installazione con la riga di comando di bash in modo che possiamo usare il comando di nodo più tardi

mkdir ~/opt

./configure --prefix = ~/opt && make && make install

echo 'export PATH = ~/opt/bin: $ {PATH}' >> ~/.bashrc #or ~/.profile o ~/.bash_profile o ~/.zshenv a seconda del sistema operativo corrente

Con uno di questi approcci, sarai in grado di fare quanto segue senza usare Sudo

npm install -g module_to_install

5
HeberLZ

Nel caso in cui Sudo chown -R $(whoami) ~/.npm non abbia funzionato per te, o hai bisogno di una soluzione di comando non terminale.

Il problema è che il tuo account utente non ha permessi di scrittura nella cartella node_modules, quindi puoi fare quanto segue 

  1. Apri Finder e premi cmd + shift + g questo si aprirà vai alla cartella con url

  2. Scrivi il seguente percorso /usr/local/lib/node_modules e premi go

  3. Fai clic destro sulla cartella node_modules e scegli Get Info

  4. Scorri fino alla sezione sharing & permissions

  5. Sblocca per essere in grado di apportare modifiche.

  6. Premi + e aggiungi il tuo account utente 

  7. Assicurati di scegliere Read & Write nel menu a discesa dei privilegi

Ora dovresti essere in grado di installare pacchetti senza Sudo e i problemi di autorizzazione dovrebbero essere risolti 

3
Amr Labib

Per me, esegui solo

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

non funziona Poi, eseguo anch'io

Sudo chown -R $(whoami) /usr/lib/node_modules/
Sudo chown -R $(whoami) /usr/bin/node
Sudo chown -R $(whoami) /usr/bin/npm

E tutto funziona bene!

3
user3753202

Ecco come ho risolto il problema su Windows 8.1:

  • Vai alla tua installazione nodejs (di solito C:\Programmi\nodejs)
  • Fare clic con il tasto destro del mouse su node_modules e andare alle proprietà
  • Fare clic sulla scheda Sicurezza e avanzate
  • In alto vedrai "Proprietario: SISTEMA", fai clic su modifica
  • Immettere l'utente per il quale si desiderano le autorizzazioni e fare clic su OK
  • Seleziona la casella nella parte inferiore delle impostazioni avanzate "Sostituisci tutte le voci di autorizzazione dell'oggetto figlio con le voci di autorizzazione ereditabili da questo oggetto" e fai clic su OK
  • Fai qualunque installazione/aggiornamento di npm di cui hai bisogno
2
KCaradonna

Su Mac OS X, quando si installa con Homebrew'sbrew install npm, il percorso di installazione è /usr/local/share/npm/ con entrambe le sottocartelle bin/ e lib/node_modules/.

L'esecuzione di questo comando per passare al proprietario dell'utente attualmente connesso dovrebbe risolvere il problema e consentire l'installazione di pacchetti NPM globali senza Sudo.

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

osxhomebrew

2
Joel Purra

Problema: Non si dispone dell'autorizzazione per scrivere nelle directory che npm utilizza per archiviare pacchetti e comandi globali.

Soluzione: Consenti l'autorizzazione per npm.

Apri un terminale:

comando + barra spaziatrice quindi digitare 'terminale'

Inserisci questo comando: 

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

  • Nota: questo richiederà la tua password.

Questa soluzione consente di SOLO le directory necessarie, mantenendo le altre directory piacevoli e sicure.

2
Matt

ISSUE: Tu (l'utente) non hai il giusto set di permessi per la directory.

La via d'uscita immediata è eseguire l'installazione di npm usando Sudo, ma questo potrebbe darti lo stesso errore o un'installazione scorretta.

E cambiare la proprietà della directory non è una buona opzione, una patch temporanea.


Soluzione/Suggerimento: Modifica la directory predefinita di npm (da official docs )

Eseguire il backup del computer prima di andare avanti.

(facoltativo) Nel caso di un'installazione errata, disinstallarla prima:

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. Crea una directory per le installazioni globali: 

    mkdir ~/.npm-global

  2. Configura npm per utilizzare il nuovo percorso di directory: 

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

  3. Apri o crea un file ~/.profile o ~/.bash_profile e aggiungi questa riga: 

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

  4. Torna alla riga di comando, aggiorna le variabili di sistema o riavvia il terminale: 

    source ~/.profile

  5. (facoltativo) Test: scaricare un pacchetto globalmente senza utilizzare Sudo.

    npm install -g jshint

2
Nabeel Ahmed

Se qualcosa di simile appare sotto durante l'installazione di npm o Vuoi installare i pacchetti globalmente su un Mac usa Sudo

npm ERR! codice EACCES
npm ERR! errno -13
npm ERR! accesso syscall

1
Ignatius Andrew

In realtà, stavo anche avendo lo stesso problema. Stavo usando Ubuntu. Il mio problema sorge perché ho perso la mia chiave pubblica di Ubuntu. Anche l'aggiornamento del mio sistema non stava accadendo. Stava dando errore GPG. In tal caso, è possibile riottenere la chiave utilizzando questo comando:

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

Dopo che npm funziona bene!

1
sam100rav

John Papa indica la storia e il ragionamento alla base di questo problema e dà una soluzione solida :

I passi di John Papa sono: 

  1. Usa brew per installare il nodo senza npm
  2. Aggiorna il tuo .bash_profile/.bashrc per consentire a npm e nodo di sapere dove installare e trovare i pacchetti
  3. Usa brew per aggiornare nodo e npm per aggiornarsi

Spero che questo aiuti i curiosi!

1
theship

La risposta di @Yves M. era molto simile alla mia soluzione. Ecco i comandi che ho usato, che erano leggermente diversi dai suoi.

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

Quindi richiedi l'ultima versione:

nvm ls-remote

Quindi installa la versione più recente:

nvm install YOUR_VERSION_HERE

esempio

nvm install v5.8.0
0
Ryan Loggerythm

Risolvo cambiando il proprietario da root al mio nome utente

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

cambiarmi con il tuo nome utente e gruppo.

0
Salem

Mi piace usare i gruppi ubuntu per ottenere questo risultato invece di cambiare proprietario. È abbastanza semplice.

  1. Prima installa nodejs e npm usando apt-get

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

  2. Scopri chi è registrato nel tuo nome utente, esegui il seguente comando per vederlo nel terminale

    whoami

  3. Puoi vedere la lista dei gruppi che ti sono assegnati usando un comando molto semplice, normalmente il primo gruppo è il tuo stesso nome utente

    groups

  4. Esegui seguendo per consentire l'accesso all'utente connesso

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

  5. Aggiorna npm e nodejs

    npm install -g npm

Sei pronto, il tuo utente può eseguire comandi npm senza Sudo

Puoi anche fare riferimento a questo link https://askubuntu.com/a/1115373/687804

0
Gitesh Dalal

Ecco i passaggi, in dettaglio ...

  • Installa Node.js da nodejs.org/en/download

  • Aggiornamento alla versione più recente di npm: $ npm install npm -g

  • Crea una nuova cartella per i pacchetti globali npm$ mkdir ~/.npm-packages

  • npm dove trovarli/memorizzarli $ npm config set prefix ~/.npm-packages

Verifica l'installazione

# this should show the versions
node -v  
npm -v  
# this should show npm and ng with no errors
npm list -g --depth=0

Spero che funzioni per te, ha funzionato per me!

0
Carlos Abraham

Se la modifica delle autorizzazioni per la directory /usr/local/lib/npm_modules Non aiuta, dovresti aggiungere il tuo utente al gruppo (nella maggior parte dei casi questo è staff group), che ha i diritti rwx per la directory /usr/bin . Perché npm cerca di rendere symlink con /usr/bin/__package__.

Post scriptum Non dimenticarti di relogin dopo aver cambiato gruppo utenti

0
Victor Perov

Questa è la soluzione che ho utilizzato e lavorato. Ho provato a utilizzare whoami non ha mai funzionato.

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

poi

Sudo chown -R $USER /usr/local/bin/npm

poi

Sudo chown -R $USER /usr/local/bin/node

0
Casey Robinson

Quello che mi sembra l'opzione migliore è quella suggerita nella documentazione npm , che prima controlla dove sono installati i node_modules globali per default eseguendo npm config get prefix. Se si ottiene, come faccio su Trusty, /usr, si potrebbe desiderare di cambiarlo in una cartella che si può tranquillamente possedere senza rovinare le cose come ho fatto io.

Per farlo, scegli o crea una nuova cartella nel tuo sistema. Puoi volerlo avere nella tua home directory o, come me, sotto /usr/local per coerenza perché sono anche un utente Mac (preferisco non dover cercare in posti diversi a seconda della macchina che mi capita di fronte) . Un altro buon motivo per farlo è il fatto che la cartella /usr/local è probabilmente già nel tuo PATH (a meno che non ti piaccia scherzare con il tuo PATH) ma è probabile che la tua cartella appena creata non sia e tu avresti bisogno di aggiungerla a il PATH sul tuo file .bash-profile o .bashrc.

Per farla breve, ho cambiato la posizione predefinita dei moduli globali con npm config set prefix '/usr/local', ho creato la cartella /usr/local/lib/node_modules (sarà utilizzata da npm) e modificato le autorizzazioni per le cartelle utilizzate da npm con il comando: 

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

Ora puoi installare globalmente qualsiasi modulo in sicurezza. Spero che questo ti aiuti!

0
yago

potresti provare questo 

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

Un'altra ottima soluzione qui per configurare correttamente NPM, eseguire i seguenti comandi:

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