2016-02-19 15 views
11

我在Windows 10上運行NPM版本3.6.0和節點verison 5.6.0:NPM更新-g什麼也不做,即使我有過時的包

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

我公司擁有一批全球的裝機NPM包:

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

> 

如果我運行npm outdated -g幾個軟件包被列爲過期。

> 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 

當我運行npm update -g它返回(幾秒鐘後)沒有任何警告或錯誤信息。但是,沒有包已經更新。

> npm update -g 
> 

正如我解釋this issuenpm update -g應該工作,並應更新頂級全球封裝。但它似乎不適合我。

如果我運行(感謝本傑明·凱澤的提示):

> npm update -g --loglevel verbose 

我得到了很多的輸出。這似乎是最相關的:

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

我還是不太明白。由於軟件包是全局的,沒有指定的semver範圍?

在一個特定的軟件包運行更新並沒有幫助:

> npm update -g tslint 
> 

甚至沒有指定版本沒有任何區別:

> npm update -g [email protected] 
> 

但即使有工作,我寧可不要到明確更新每個包。對我來說,軟件包管理器的一個主要特性應該是可以輕鬆地一次更新所有內容。

This issue聽起來有關。但是當我看到tslint npm module「最新」似乎是3.4.0。那麼爲什麼不升級?

+1

您是否嘗試過加入'--loglevel verbose'標誌,檢查是否有可能以較低的日誌級別是這樣嗎? 從你所說的一切,你的npm版本應該是最新的來運行該命令。 –

+0

謝謝@BenjaminKaiser,我用設置該標誌的結果擴展了我的問題 –

+1

這超級怪異,你說得對,它是全球性的,因此不應該有一個semver。 我可能會嘗試擦拭全局包再次開始。也許重新安裝npm也是最新的版本(3.7.4我認爲) –

回答

10

npm -g update有,呃,非常意外的行爲。這可能是一個合適的解決辦法:

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

謝謝 - 這是一個很好的解決方法,並且肯定會執行與我期望的'npm -g update'相同的行爲。 – lantrix

+0

好的答案男人! – huachengzan