NPM non può installare dipendenze - Tentativo di sbloccare qualcosa che non è stato bloccato


192

Ho provato a eseguire un'installazione npm sul mio file package.json, ma ho molti problemi. Continua a dire "Errore: tentativo di sbloccare XXX, che non è stato bloccato" su tutte le mie dipendenze. Eccone uno:

Error: Attempt to unlock tbd@~0.6.4, which hasn't been locked
        at unlock (/usr/local/lib/node_modules/npm/lib/cache.js:1304:11)
        at cb (/usr/local/lib/node_modules/npm/lib/cache.js:646:5)
        at /usr/local/lib/node_modules/npm/lib/cache.js:655:20
        at /usr/local/lib/node_modules/npm/lib/cache.js:1290:7
        at /usr/local/lib/node_modules/npm/node_modules/lockfile/lockfile.js:167:38
        at OpenReq.Req.done (/usr/local/lib/node_modules/npm/node_modules/graceful-fs/graceful-fs.js:144:5)
        at OpenReq.done (/usr/local/lib/node_modules/npm/node_modules/graceful-fs/graceful-fs.js:64:22)
        at Object.oncomplete (fs.js:107:15)

Se provo a eseguirlo come sudo, sembra andare oltre e iniziare a installare alcuni pacchetti, ma invece compaiono alcuni nuovi errori popup:

> chokidar@0.8.1 postinstall /Users/tkirchner/Documents/Projects/mm-datatable/node_modules/karma/node_modules/chokidar
> node setup-deps.js

shell-init: error retrieving current directory: getcwd: cannot access parent directories: Permission denied

node.js:811
    var cwd = process.cwd();
                      ^
Error: EACCES, permission denied
    at Function.startup.resolveArgv0 (node.js:811:23)
    at startup (node.js:58:13)
    at node.js:902:3
npm ERR! error rolling back Error: ENOTEMPTY, rmdir '/Users/tkirchner/Documents/Projects/mm-datatable/node_modules/karma/node_modules/q'
npm ERR! error rolling back  karma@0.10.9 { [Error: ENOTEMPTY, rmdir '/Users/tkirchner/Documents/Projects/mm-datatable/node_modules/karma/node_modules/q']
npm ERR! error rolling back   errno: 53,
npm ERR! error rolling back   code: 'ENOTEMPTY',
npm ERR! error rolling back   path: '/Users/tkirchner/Documents/Projects/mm-datatable/node_modules/karma/node_modules/q' }
npm ERR! Error: ENOENT, chown '/Users/tkirchner/Documents/Projects/mm-datatable/node_modules/karma/node_modules/socket.io/lib/socket.io.js'

Di recente ho aggiornato le mie installazioni di nodo e npm. Quindi forse questo ha qualcosa a che fare con questo. Inoltre, la maggior parte del mio sviluppo è stata in ufficio e oggi sto lavorando su VPN, quindi forse ha anche a che fare con questo.

Qualche idea?


Ecco il file package.json, se questo aiuta ... (sospiro), nvm, non riesco a incollarlo in ... troppi caratteri.
TJ Kirchner,

che cosa stai facendo
wayne

Risposte:


421

Come da photusenigma a: https://github.com/npm/npm/issues/4815

Esegui questi comandi in una finestra del terminale (nota: NON sostituire la parte $ USER ... questo è un comando linux per ottenere il tuo utente!):

sudo chown -R $USER ~/.npm
sudo chown -R $USER /usr/local/lib/node_modules

... e ... se sei su un Mac (come lo sono io) e vedi ancora errori dopo aver eseguito questi comandi, esegui quest'ultimo e dovresti essere bravo. (Consiglio di provare a provare prima di farlo. Non mi piace cambiare i permessi nella directory INTERO / usr / local a meno che non sembri davvero necessario!)

sudo chown -R $USER /usr/local

7
Ha funzionato per me grazie! La mia cartella node_modules si trovava in una posizione diversa, forse questo potrebbe aiutare qualcun altrosudo chown -R `whoami` /usr/lib/node_modules/
Justen

4
Stranamente, ricorsivo chownnon ha cambiato le autorizzazioni ~/.npm/_locksper me. Ho fatto funzionare il mio correndosudo chown -R myname ~/.npm/_locks
Sitati il

7
Tieni presente che questa soluzione non è adatta per piattaforme multiutente. Il primo comando è ok, il secondo rende un utente standard proprietario dei file di sistema. / usr / local / lib / node_modules è usato solo da npm con l'opzione --global, questo significa anche usare sudo. Sfortunatamente, alcuni script di installazione che utilizzano npm mescolano comandi npm sia globali che non globali ... Creazione di questo pasticcio.
Fafaman,

5
D'accordo, tutto ciò che serve è il primo comando. Evita gli altri in quanto quelli non dovrebbero essere di proprietà del tuo utente.
pyrospade,

2
c'è un modo per invertire gli "effetti" della seconda riga sudo chown -R $USER /usr/local/lib/node_modules? L'ho eseguito prima di leggere che non è una buona idea ..
Shaneparsons,

153

Ho lavorato con un collega questo pomeriggio e ho capito quale fosse il problema. La mia cartella ".npm" nella mia home directory era di proprietà dell'utente root anziché di me stesso. Non sono sicuro di cosa sia successo. Forse ho installato node o npm come admin root ad un certo punto. In ogni caso ho appena eseguito sudo chown -R [username] .npme sono stato finalmente in grado di eseguire npm installnuovamente i comandi dai miei progetti!


11
Aiuta anche se esegui anche lo stesso comando ~/tmp/o qualsiasi posizione Node utilizza come posizione temporanea
Jason

1
La ringrazio per la risposta! Mi è stato risparmiato un po 'di mal di testa perché il messaggio di errore è negativo. Ma dirò che npm deve farlo per impostazione predefinita perché sono abbastanza sicuro di non averlo installato da solo. E, per completezza, devi vestire -R <nomeutente> .npm
crowmagnumb

Sono contento di aver potuto aiutare :) E, buona cattura! Modificherò la mia risposta per dirlo.
TJ Kirchner,

Salvavita! Grazie
Matthew Cullum,

21

Nel mio caso il problema stava invocando npm con un utente che non ha una directory HOME, quindi per esempio il seguente comando fallirebbe:

sudo -u someUser npm install

La soluzione è fornire una directory HOME, dove someUserha accesso in scrittura:

sudo -u someUser HOME=/some/directory npm install

Ha votato perché questo ha funzionato davvero per me, quindi complimenti e grazie. Sto distribuendo alla produzione e l'utente non aveva nemmeno una directory .npm (che ho trovato comunque)
Stuart Watt

Funziona su ChromeOS con l'utente "chronos".
Kyle Coberly,

Sono stato in grado di aggirare il problema specificando sudo -u someUser -i, che avvia una nuova shell di accesso. Ho esaminato ancora un po 'questo e il codice di cache in npm utilizza la variabile npm.cache, che presumo sia quella predefinita $HOME/.npm/. sudo può anche avere un comportamento diverso rispetto all'impostazione della variabile HOME in base alla configurazione e alla presenza o assenza di opzioni della riga di comando.
Jgibson,

11

Aveva lo stesso problema e risolto modificando le convinzioni secondo la risposta accettata:

sudo chown -R $USER ~/.npm

Tuttavia, il secondo comando dovrebbe essere evitato in quanto riduce le autorizzazioni di una risorsa di sistema (sudo chown -R $USER /usr/local/lib/node_modules ). Non è una buona idea.

Per la cronaca: "usr" /usr/localsta per Unix System Resources .


1
Questo dovrebbe probabilmente essere un commento sulla risposta accettata piuttosto che pubblicato come una nuova risposta.
Kmeixner,

L'autore di quella risposta lo sa, ma non ha aggiornato la sua risposta, quindi dico che uno separato è molto giustificato.
Gui Prá,

4

Niente di tutto questo ha funzionato per me. Ho dovuto eseguire letteralmente come root facendo quanto segue:

sudo su -
sudo npm install forever -g

Quindi il pacchetto installato su Linux Ubuntu 14.04.


Non dovresti davvero eseguire npm come root!
Antoine 'hashar' Musso,


1

La mia soluzione:

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

nel mio caso era:

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

Ma stavo avendo lo stesso problema, finalmente dopo

npm cache clean

ha funzionato !


0

Ho avuto lo stesso problema e ho cercato di correggere l'autorizzazione / proprietà dei file e delle directory relativi a npm per ore, ma non ne ho avuto fortuna.

Improvvisamente ho scoperto che avevo un ~/.npmrcfile con cachevoce che puntava a una directory inesistente. Rimossa quella cacheproprietà per utilizzare la posizione cache predefinita e ora è stata risolta.


0

disconoscimento

Sono un utente Windows . Tuttavia, il mio team e io abbiamo riscontrato una serie di problemi relativi agli errori di installazione di npm.

I problemi

Di seguito è riportato un elenco delle lezioni apprese e una possibile soluzione radicale che ci ha sempre salvato:

  1. node_modules , la directory di installazione locale di npm viene protetta dalle modifiche da un difetto del sistema operativo come l'impossibilità di elaborare percorsi più lunghi di 255 caratteri.
  2. Se la cartella viene cancellata mediante uno strumento da riga di comando, potrebbe comunque apparire come se la cartella esistesse nell'esploratore che, quando si tenta di accedervi, presenta una serie di errori di autorizzazione.
  3. A seconda dell'antivirus e / o del responsabile delle politiche locali, potresti essere in grado di creare node_modules cartella e in seguito relegare l'accesso o le autorizzazioni ad essa causando una serie di errori di installazione.
  4. Abilita i registri npm per ottenere ulteriori informazioni sui possibili problemi con:

    npm install --loglevel verbose

Radicale

Installa rimraf a livello globale

 npm install rimraf -g

Esegui rimraf su node_modules :

rimraf yourDir/node_modules

Quindi prova a correre:

npm install

Avvertimento!

O la mancanza di. Fai molta attenzione a ciò che segue il comando rimraf. Non ci sono avvisi, nessun prompt, non c'è nulla. Cancella semplicemente la directory dalla fase della terra pulita, come se non ci fosse mai stata. Provalo a tuo rischio e pericolo.

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.