npm update -g即使我有过时的包也没有做任何事情

Kla*_*urn 15 windows package-managers node.js npm windows-10

我在Windows 10上运行npm版本3.6.0和节点版本5.6.0:

> 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' }
>
Run Code Online (Sandbox Code Playgroud)

我有一些全局安装的npm包:

> npm ls -g --depth=0
C:\Users\Klas\AppData\Roaming\npm
+-- bower@1.7.7
+-- generator-gulp-angular@1.0.2
+-- generator-gulp-angular-subtask@0.9.1
+-- gulp@3.9.1
+-- jspm@0.16.25
+-- karma-cli@0.1.2
+-- live-server@0.9.0
+-- protractor@3.0.0
+-- tsd@0.6.5
+-- tslint@3.2.2
+-- typescript@1.7.5
+-- webpack@1.12.11
+-- webpack-dev-server@1.14.1
`-- yo@1.6.0

>
Run Code Online (Sandbox Code Playgroud)

如果我运行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
Run Code Online (Sandbox Code Playgroud)

当我运行npm update -g它时(几秒钟后)返回,没有任何警告或错误消息.但是,没有更新任何包.

> npm update -g
>
Run Code Online (Sandbox Code Playgroud)

当我解释这个问题时,npm update -g应该工作,并且应该更新顶级全局包.但它似乎对我不起作用.

如果我跑(感谢Benjamin Kaiser的提示):

> npm update -g --loglevel verbose
Run Code Online (Sandbox Code Playgroud)

我得到了很多输出.这似乎是最相关的:

npm verb outdated not updating tslint because it's currently at the maximum version 
that matches its specified semver range
Run Code Online (Sandbox Code Playgroud)

我还是不太明白.由于包是全局的,没有指定的semver范围?

在特定包上运行更新也无济于事:

> npm update -g tslint
>
Run Code Online (Sandbox Code Playgroud)

甚至没有指定版本有任何区别:

> npm update -g tslint@3.4.0
>
Run Code Online (Sandbox Code Playgroud)

但即使这样有效,我宁愿不必明确更新每个包.对我来说,包管理器的一个主要特性应该是让一次更新所有内容变得容易.

这个问题听起来很相关 但是当我查看tslint npm模块时,"最新"似乎是3.4.0.那么为什么没有升级?

mjs*_*mjs 12

npm -g update有,呃,非常意外的行为.这可能是一个合适的解决方法:

$ npm -g outdated --parseable=true | cut -d : -f 4 | xargs -n 1 npm -g install
Run Code Online (Sandbox Code Playgroud)

  • 通过详细说明什么是“npm”行为、它的含义以及是否有任何方法可以改变它,可以大大改善这个答案。现在我们有解决问题的命令,但没有真正了解问题。 (4认同)