2016-02-19 63 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

相关问题