2016-02-19 12 views
11

Ich bin mit npm Version 3.6.0 und Knoten verison 5.6.0 unter Windows 10:npm Update -g nichts tut, obwohl ich Pakete veraltet haben

> 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' } 
> 

Ich habe eine Reihe von weltweit installierten npm Pakete:

> 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] 

> 

Wenn ich npm outdated -g mehrere Pakete ausgeführt werden als veraltet aufgeführt.

> 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 

Wenn ich npm update -g führen Sie es zurück (nach ein paar Sekunden) ohne Warnung oder Fehlermeldung. Es wurden jedoch keine Pakete aktualisiert.

> npm update -g 
> 

Wie ich interpretieren this issue sollte npm update -g arbeiten und sollte oberste Ebene globale Pakete aktualisieren. Aber es scheint nicht für mich zu funktionieren.

Wenn ich (dank Benjamin Kaiser für die Spitze) laufen:

> npm update -g --loglevel verbose 

ich viel Ausganges. Dies scheint am wichtigsten zu sein:

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

Ich verstehe immer noch nicht ganz. Da die Pakete global sind, gibt es keinen spezifizierten Bereich?

auf ein bestimmtes Paket Update Lauf hilft auch nicht:

> npm update -g tslint 
> 

Nicht einmal eine Version Angabe keinen Unterschied macht:

> npm update -g [email protected] 
> 

Aber selbst wenn das gearbeitet hätte, hätte ich lieber nicht haben explizit jedes Paket aktualisieren. Ein Hauptmerkmal eines Paketmanagers sollte für mich sein, dass es einfach ist, alles auf einmal zu aktualisieren.

This issue klingt ähnlich. Aber wenn ich mir die tslint npm module anschaue, scheint die "letzte" 3.4.0 zu sein. Warum also kein Upgrade?

+1

Haben Sie versucht, das Flag "--loglevel verbose" hinzuzufügen, um zu sehen, ob etwas auf einer niedrigeren Protokollebene passieren könnte? Von allem, was Sie gesagt haben, sollten Sie Ihre npm Version auf dem neuesten Stand sein, diesen Befehl auszuführen. –

+0

Dank @BenjaminKaiser, erweiterte ich meine Frage mit den Ergebnissen, dass die Fahne –

+1

Einstellung, die Super seltsam, Sie haben Recht, dass es global ist und als solche sollten keine semver haben. ich vielleicht versuchen würde beginnen wieder eine globale Pakete abwischen. Vielleicht neu installieren npm auch auf die neueste Version (3.7.4 denke ich) –

Antwort

10

npm -g update hat, äh, ziemlich unerwartetes Verhalten. Das könnte eine geeignete Problemumgehung sein:

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

Danke - das ist ein guter Workaround, und tut definitiv das gleiche Verhalten, das ich von 'npm -g update' erwarte. – lantrix

+0

Nizza Antwort Mann! – huachengzan