2016-02-19 14 views
11

Sono in esecuzione NPM versione 3.6.0 e il nodo verison 5.6.0 su Windows 10:aggiornamento npm -g nulla fa anche se ho superata pacchetti

> npm version 
{ npm: '3.6.0', 
    ares: '1.10.1-DEV', 
    http_parser: '2.6.1', 
    icu: '56.1', 
    modules: '47', 
    node: '5.6.0', 
    openssl: '1.0.2f', 
    uv: '1.8.0', 
    v8: '4.6.85.31', 
    zlib: '1.2.8' } 
> 

Ho un certo numero di pacchetti NPM installati a livello globale:

> npm ls -g --depth=0 
C:\Users\Klas\AppData\Roaming\npm 
+-- [email protected] 
+-- [email protected] 
+-- [email protected] 
+-- [email protected] 
+-- [email protected] 
+-- [email protected] 
+-- [email protected] 
+-- [email protected] 
+-- [email protected] 
+-- [email protected] 
+-- [email protected] 
+-- [email protected] 
+-- [email protected] 
`-- [email protected] 

> 

Se corro npm outdated -g diversi pacchetti sono elencati come obsoleto.

> npm outdated -g 
Package  Current Wanted Latest Location 
jspm   0.16.25 0.16.25 0.16.29 
live-server 0.9.0 0.9.0 0.9.2 
protractor  3.0.0 3.0.0 3.1.1 
tslint   3.2.2 3.2.2 3.4.0 
webpack  1.12.11 1.12.11 1.12.13 

Quando eseguo npm update -g ritorna (dopo un paio di secondi) senza alcun messaggio di avviso o errore. Tuttavia, nessun pacchetto è stato aggiornato.

> npm update -g 
> 

Come interpreto this issue, npm update -g dovrebbe funzionare, e dovrebbero aggiornare i pacchetti globali di alto livello. Ma non sembra funzionare per me.

Se corro (grazie a Benjamin Kaiser per la punta):

> npm update -g --loglevel verbose 

ho un sacco di uscita. Questo sembra essere il più rilevante:

npm verb outdated not updating tslint because it's currently at the maximum version 
that matches its specified semver range 

Ancora non capisco. Dato che i pacchetti sono globali, non esiste un range di semiraggi specifico?

Esecuzione di aggiornamento su un particolare pacchetto non aiuta:

> npm update -g tslint 
> 

Nemmeno specificando una versione non alcuna differenza:

> npm update -g [email protected] 
> 

Ma anche se che aveva funzionato avrei preferito non dover aggiornare esplicitamente ciascun pacchetto. Per me, una caratteristica importante di un gestore di pacchetti dovrebbe essere quella di rendere più semplice l'aggiornamento di tutto in una volta.

This issue suoni correlati. Ma quando guardo lo tslint npm module, "l'ultimo" sembra essere 3.4.0. Quindi, perché nessun aggiornamento?

+1

Avete provato ad aggiungere il flag '--loglevel verbose' per vedere se qualcosa potrebbe accadere ad un livello di registro più basso? Da tutto ciò che hai detto, la tua versione di npm dovrebbe essere aggiornata per eseguire quel comando. –

+0

Grazie a @BenjaminKaiser, ho esteso la mia domanda con i risultati dell'impostazione di questo flag –

+1

Questo è super strano, hai ragione che è globale e come tale non dovrebbe avere un semiver. Potrei provare a cancellare i pacchetti globali e ricominciare da capo. Forse reinstallando npm anche alla versione più recente (3.7.4 credo) –

risposta

10

npm -g update ha un comportamento piuttosto inaspettato. Questa potrebbe essere una soluzione adatta:

$ npm -g outdated --parseable=true | cut -d : -f 4 | xargs -n 1 npm -g install 
+0

Grazie - questa è una buona soluzione, e sicuramente fa lo stesso comportamento che mi aspetto da 'npm -g update'. – lantrix

+0

Bel uomo di risposta! – huachengzan

Problemi correlati