Installazione di Npm non riuscita con "impossibile eseguire in wd"


153

Sto cercando di configurare il mio ambiente di nodo su una nuova istanza di Ubuntu 12.04, con il nodo 0.8.14 già installato, ma ho riscontrato problemi quando provo a eseguire npm install. Quindi, quando provo npm install, dice che devo eseguirlo come root o admin:

Error: EACCES, mkdir '/usr/local/lib/node_modules/coffee-script'
npm ERR!  { [Error: EACCES, mkdir '/usr/local/lib/node_modules/coffee-script']
npm ERR!   errno: 3,
npm ERR!   code: 'EACCES',
npm ERR!   path: '/usr/local/lib/node_modules/coffee-script',
npm ERR!   fstream_type: 'Directory',
npm ERR!   fstream_path: '/usr/local/lib/node_modules/coffee-script',
npm ERR!   fstream_class: 'DirWriter',
npm ERR!   fstream_stack: 
npm ERR!    [ 'DirWriter._create                 (/usr/local/lib/node_modules/npm/node_modules/fstream/lib/dir-writer.js:36:23)',
npm ERR!      '/usr/local/lib/node_modules/npm/node_modules/mkdirp/index.js:37:53',
npm ERR!      'Object.oncomplete (fs.js:297:15)' ] }
npm ERR! 
npm ERR! Please try running this command again as root/Administrator.

Ma quando si tenta di eseguirlo come sudo, si dice quanto segue:

npm WARN cannot run in wd PackNodeDev@0.0.1-166 npm install -g coffee-script node-gyp (wd=/home/ubuntu/PackNode)

Nel mio package.json, contiene i seguenti script:

"scripts": {
    "preinstall": "npm install -g coffee-script node-gyp",
    "start": "node server.js",
    "test": "mocha --require should --compilers coffee:coffee-script --colors"
 },

Le restanti dipendenze sono valide dal momento che ho installato tutto bene sul mio computer (Mac) Qualcuno ha la minima idea del perché questo accada?

Risposte:


231

La documentazione dice (anche qui ):

Se npm è stato invocato con i privilegi di root, cambierà l'UID nell'account utente o l'UID specificato dalla userconfigurazione, che per impostazione predefinita è nobody. Imposta il unsafe-permflag per eseguire script con privilegi di root.

Le tue opzioni sono:

  1. Corri npm installcon la --unsafe-permbandiera:

    [sudo] npm install --unsafe-perm
  2. Aggiungi la unsafe-permbandiera al tuo package.json:

    "config": {
        "unsafe-perm":true
    }
  3. Non utilizzare lo preinstallscript per installare i moduli globali, installarli separatamente e quindi eseguire il normale npm installsenza i privilegi di root:

    sudo npm install -g coffee-script node-gyp
    npm install

Correlato :


2
Mi dispiace non aver visto questo fino ad ora. Ho provato prima "unsafe-perm" ma non ha funzionato neanche. Il problema persiste
EH,

10
Questo per me funziona: sudo npm install --unsafe-permtuttavia sudo npm install, anche se non l'ho aggiunto "unsafe-perm":truea package.json ... Non so perché
Dmitry Pashkevich

8
Aggiungendolo alla proprietà "config" in package.json in realtà si imposta "npm_package_config_unsafe_perm" quindi l'opzione 2 non funziona. Vedi: stackoverflow.com/questions/28763958/...
justmoon

'unsafe-perm': vero fallito anche per me. Peccato che non abbia dato l'errore e il contesto (incluso il suo cambio uid) nel messaggio di errore, invece di smorzare la causa dall'esistenza e dare qualcosa di criptico, sorprendente e ostile.
android.weasel,

Mentre npm install --unsafe-permfunziona per me, ho provato a seguire le implicazioni sulla modifica della userconfigurazione predefinita . Così ho fatto npm set user my_usere npm set group my_group, che aggiunge le voci corrispondenti nel .npmrcfile dell'utente root . Ma il problema è che la node_modulescartella stessa e le sue sottocartelle sono ancora di proprietà di root, quindi non aiuta. Non riuscivo a capire in alcun modo che non fossero di proprietà di root.
Fulv

53

L'unica cosa che ha funzionato per me è stata l'aggiunta di un .npmrcfile contenente:

unsafe-perm = true

L'aggiunta della stessa configurazione a package.jsonnon ha avuto alcun effetto.


36
in docker:RUN npm set unsafe-perm true
Alexander Mills

se si utilizza WSL, digitare set unsafe-perm true. Questo ti aiuterà
Stas Panyukov il

26

Ho riscontrato lo stesso problema durante il tentativo di pubblicare la mia app nodejs in un server privato che esegue CentOs utilizzando l'utente root. Lo stesso errore viene generato da "postinstall": "./node_modules/bower/bin/bower install" nel mio file package.json, quindi l'unica soluzione che funzionava per me è utilizzare entrambe le opzioni per evitare l'errore:

1: utilizzare l'opzione --allow-root per il comando di installazione di Bower

"postinstall": "./node_modules/bower/bin/bower --allow-root install"

2: utilizzare l'opzione --unsafe-perm per il comando npm install

npm install --unsafe-perm

12

OP qui, ho imparato molto di più sul nodo dalla prima volta che ho posto questa domanda. Sebbene la risposta di Dmitry sia stata molto utile, quello che alla fine ha fatto per me è installare il nodo con le autorizzazioni corrette.

Consiglio vivamente di non installare il nodo utilizzando alcun gestore di pacchetti, ma piuttosto di compilarlo da solo in modo che risieda in una directory locale con le normali autorizzazioni.

Questo articolo fornisce un'istruzione passo-passo molto chiara su come procedere:

https://www.digitalocean.com/community/tutorials/how-to-install-an-upstream-version-of-node-js-on-ubuntu-12-04


2

Ho risolto questo problema cambiando la proprietà /usr/locale in questo ~/Users/user-namemodo:

sudo chown -R my_name /usr/local

Questo mi ha permesso di fare tutto senza sudo

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.