npm genera un errore senza sudo

Ho appena installato il nodo e npm attraverso il pacchetto su nodejs.org e ogni volta che provo a cercare o installare qualcosa con npm getta il seguente errore, a meno che non sudo il comando. 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 utilizzate durante l’installazione di Node saranno necessarie quando si eseguono operazioni come scrivere nella directory npm link ( 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 sta chiedendo 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 il npm link npm install -g , npm install -g necessiteranno 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 installare NVM seguendo le istruzioni su 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 si utilizza OSX o Linux, è ansible creare una directory dedicata all’utente per il pacchetto globale e configurare npm e node per sapere come trovare pacchetti installati globalmente.

Dai un’occhiata a questo fantastico articolo per le istruzioni passo passo sull’installazione di moduli npm globalmente senza sudo.

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

Inoltre avrai bisogno dell’authorization 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 
  1. Devi sbloccare i permessi nella tua home directory, come dice Noah :

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

     sudo chown -R `whoami` /usr/local/lib/node_modules 
  3. Se vedi ancora degli errori, potresti anche dover correggere /usr/local autorizzazioni /usr/local :

     sudo chown -R `whoami` /usr/local 

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

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 la risposta di @ErikAndreas ai moduli NPM non verrà installata globalmente senza sudo e una guida passo-passo più lunga di @sindresorhus con anche set $MANPATH .

Altre risposte suggeriscono di cambiare proprietà o permessi 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 utilizzare Node Version Manager . Ti dà un sacco di tempo e problemi.

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

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

Opzione 1: modifica dell’authorization 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 .

ATTENZIONE : se il percorso visualizzato è solo / usr , passare all’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} 

    Cambia 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

Ci sono momentjs in cui non si desidera modificare la proprietà della directory predefinita utilizzata da npm (es. / Usr) in quanto ciò potrebbe causare alcuni problemi, ad esempio se si condivide il sistema con altri utenti.

Invece, è ansible 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. Indietro sulla riga di comando, aggiorna le tue variabili di sistema:

     source ~/.profile 

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

chown o chmod NON è la 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 

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 delineando 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 sopra descritti

Scopri la 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/

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
    sudo chown -R $ (whoami): nodegrp ~ / .npm

Ho avuto un problema simile ai moduli NPM che non verranno installati globalmente senza sudo , il problema è stato che quando ho installato il nodo l’ho fatto con sudo via chris / lea ppa repo .

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

Scarica le ultime fonti di nodes 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

sudo chown $ 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 che già possiedi. Il problema di questo approccio è che dovrai colbind 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 mio caso, è a causa del permesso di ~ / tmp. Così faccio:

 sudo chown -R $USER ~/tmp 

Ed è OK!

TL; DR

usa sempre sudo -i o sudo -H quando npm install per installare i 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 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
  • tentare di installare il pacchetto locale con la npm install bar
  • si npm frustrati npm progettisti di npm ora che devi ricominciare chmod una directory

Quando si utilizza l’opzione -i o -H con sudo, la directory home sarà la home directory di root . Qualsiasi installazione globale memorizzerà i pacchetti in /root/.npm invece dei file di root in /home/me/.npm .

Usa sempre sudo -i o sudo -H quando npm install per installare i pacchetti globali ei tuoi permessi di npm si scioglieranno.

Per sempre.

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

qv la risposta accettata per sistemare un npm già fottuto.

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!

Problema: non si dispone dell’authorization per scrivere nelle directory che npm utilizza per memorizzare pacchetti e comandi globali.

Soluzione: consenti l’authorization per npm.

Apri un terminale:

comando + barra spaziatrice quindi digitare ‘terminale’

Inserisci questo comando:

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

  • Nota: questo richiederà la tua password.

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

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

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/ 

osx homebrew

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
  • Nella parte superiore vedrai “Proprietario: SISTEMA”, fai clic su modifica
  • Inserisci l’utente per il quale desideri ottenere le autorizzazioni e fai clic su OK
  • Seleziona la casella nella parte inferiore delle impostazioni avanzate “Sostituisci tutte le voci di authorization dell’object figlio con le voci di authorization ereditabili da questo object” e fai clic su OK
  • Fai qualunque installazione / aggiornamento di npm di cui hai bisogno

Nel caso in cui sudo chown -R $(whoami) ~/.npm non ha 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 per aprire vai alla cartella con url

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

  3. Fare clic con il tasto destro sulla cartella node_modules e selezionare Get Info

  4. Scorri verso il basso fino alla sezione di sharing & permissions

  5. Sblocca per essere in grado di apportare modifiche.

  6. Premi + e aggiungi il tuo account utente

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

Ora dovresti essere in grado di installare pacchetti senza sudo e i problemi di authorization dovrebbero essere risolti

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, è ansible riottenere la chiave utilizzando questo comando:

 sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys  

Dopo che npm funziona bene!

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

I passi di John Papa sono:

  1. Utilizzare 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!

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

PROBLEMA : 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 : cambiare la directory predefinita di npm (da documenti ufficiali)

Eseguire il backup del computer prima di andare avanti.

(facoltativo) Nel caso di un’installazione errata, disinstallarla per prima cosa:

 npm uninstall  # use sudo if you used it while installation npm cache verify # or, npm cache clean for npm version below 5.xx 
  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: scarica un pacchetto globalmente senza usare sudo.

    npm install -g jshint

Se la modifica dei permessi per directory /usr/local/lib/npm_modules non è d’aiuto, dovresti aggiungere il tuo utente al gruppo (nella maggior parte dei casi si tratta di staff gruppo di staff ), che ha i diritti di rwx per la /usr/bin . Perché npm cerca di creare collegamenti symlink con /usr/bin/__package__ .

PS 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

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 

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 

Quello che a me sembra l’opzione migliore è quella suggerita nella documentazione di npm , che è quella di verificare prima dove i node_modules globali sono installati di 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 fare ciò, 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 in cui mi trovo di fronte). Un altro buon motivo per farlo è il fatto che la /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 aggiungilo al PATH sul tuo file .bash o .bashrc .

Per npm config set prefix '/usr/local' breve, ho cambiato la posizione predefinita dei moduli globali con il npm config set prefix '/usr/local' , ho creato la cartella /usr/local/lib/node_modules (verrà utilizzata da npm) e le autorizzazioni modificate per le cartelle usato 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!

Non mi merito per questa soluzione. Grazie a questo ragazzo: https://gist.github.com/isaacs/579814

 # take ownership of the folders that npm/node use # please don't do this if you don't know what it does! sudo mkdir -p /usr/local/{share/man,bin,lib/node,include/node} sudo chown -R $USER /usr/local/{share/man,bin,lib/node,include/node} # now just a pretty vanilla node install # let it use the default paths, but don't use sudo, since there's no need mkdir node-install curl http://nodejs.org/dist/node-v0.4.3.tar.gz | tar -xzf - -C node-install cd node-install/* ./configure make install # now the npm easy-install curl https://www.npmjs.org/install.sh | sh 

E poi …

 sudo chown -R web:web /home/web/api/ sudo runuser -l web -c 'npm install --prefix /home/web/api' 

In questo modo il nodo non viene mai eseguito come root e l’utente può installare senza sudo.

potresti provare questo

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