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
Questo sembra un problema di permessi nella tua home directory. Per recuperare la proprietà della directory .npm eseguire:
Sudo chown -R $(whoami) ~/.npm
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.
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.
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
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 .
Inoltre avrai bisogno dell'autorizzazione alla scrittura nella directory node_modules
:
Sudo chown -R $USER /usr/local/lib/node_modules
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
Devi sbloccare le autorizzazioni nella tua directory home
, come Noah Dice:
Sudo chown -R `whoami` ~/.npm
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
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).
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
.
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.
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
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
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.
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.
Crea una directory per le installazioni globali:
mkdir ~/.npm-global
Configura npm per utilizzare il nuovo percorso di directory:
npm config set prefix '~/.npm-global'
Apri o crea un file ~/.profile e aggiungi questa riga:
export PATH=~/.npm-global/bin:$PATH
Torna alla riga di comando, aggiorna le tue variabili di sistema:
source ~/.profile
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.
Crea una directory per i tuoi pacchetti globali
mkdir "${HOME}/.npm-packages"
Fai riferimento a questa directory per utilizzi futuri nel tuo .bashrc/.zshrc:
NPM_PACKAGES="${HOME}/.npm-packages"
Indicare a npm dove memorizzare il pacchetto installato globalmente. Nel tuo file
$HOME/.npmrc
aggiungi:prefix=${HOME}/.npm-packages
Accertati che il nodo li trovi. Aggiungi quanto segue al tuo .bashrc/.zshrc:
NODE_PATH="$NPM_PACKAGES/lib/node_modules:$NODE_PATH"
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.
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/
TL; DR
usa sempre
Sudo -i
oSudo -H
quando eseguinpm 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
:
npm install foo
Sudo install -g foo-cli
senza probleminpm install bar
npm
ora che devi tornare a chmod
una directoryQuando 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.
Per Mac (adottato dalla risposta di Christoper Will)
Mac OS X 10.9.4
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
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
Nel mio caso, è a causa del permesso di ~/tmp. Così faccio:
Sudo chown -R $USER ~/tmp
Ed è OK!
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
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
Apri Finder e premi cmd
+ shift
+ g
questo si aprirà vai alla cartella con url
Scrivi il seguente percorso /usr/local/lib/node_modules
e premi go
Fai clic destro sulla cartella node_modules
e scegli Get Info
Scorri fino alla sezione sharing & permissions
Sblocca per essere in grado di apportare modifiche.
Premi +
e aggiungi il tuo account utente
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
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!
Ecco come ho risolto il problema su Windows 8.1:
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/
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}
Questa soluzione consente di SOLO le directory necessarie, mantenendo le altre directory piacevoli e sicure.
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
Crea una directory per le installazioni globali:
mkdir ~/.npm-global
Configura npm per utilizzare il nuovo percorso di directory:
npm config set prefix '~/.npm-global'
Apri o crea un file ~/.profile
o ~/.bash_profile
e aggiungi questa riga:
export PATH=~/.npm-global/bin:$PATH
Torna alla riga di comando, aggiorna le variabili di sistema o riavvia il terminale:
source ~/.profile
(facoltativo) Test: scaricare un pacchetto globalmente senza utilizzare Sudo.
npm install -g jshint
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
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!
John Papa indica la storia e il ragionamento alla base di questo problema e dà una soluzione solida :
I passi di John Papa sono:
Spero che questo aiuti i curiosi!
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
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.
Mi piace usare i gruppi ubuntu per ottenere questo risultato invece di cambiare proprietario. È abbastanza semplice.
Prima installa nodejs e npm usando apt-get
Sudo apt-get update && Sudo apt-get install nodejs npm
Scopri chi è registrato nel tuo nome utente, esegui il seguente comando per vederlo nel terminale
whoami
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
Esegui seguendo per consentire l'accesso all'utente connesso
Sudo chmod 777 -R /usr/local && Sudo chgrp $(whoami) -R /usr/local
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
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
Dì 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!
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
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
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!
potresti provare questo
Sudo chown -R $(whoami) $(npm config get prefix)/{lib/node_modules,bin,share}
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