如何更新全局安装的npm包?

128

命令:npm outdated -g

输出:

Package           Current  Wanted  Latest  Location

@angular/cli        1.3.1   1.7.4   7.0.5
create-react-app    1.5.2   1.5.2   2.1.1
eslint              5.6.0   5.9.0   5.9.0
expo-cli            2.2.0   2.3.8   2.3.8
gulp-cli            1.4.0   1.4.0   2.0.1
how-to-npm          2.5.0   2.5.1   2.5.1
mocha               3.5.0   3.5.3   5.2.0
nodemon            1.18.3  1.18.6  1.18.6
now                11.4.6  11.5.2  12.0.1
serve              10.0.1  10.0.2  10.0.2
typescript          2.4.2   2.9.2   3.1.6
yarn                1.9.4  1.12.3  1.12.3

我该如何在npm中更新这些过时的软件包?

4个回答

192

如果您想更新所有全局包

npm update -g

如果您想更新特定的全局软件包

npm update -g <package_name>

1
如果您使用的是 Mac,则命令为 sudo npm update -g;如果您使用的是 Windows,则需要以管理员身份打开终端,然后执行 npm update -g 命令。 - Mohit Tilwani
2
请注意,如果您使用 nvm,则有一个陷阱。您只能列出当前版本的模块,但在您的路径中,您可能仍然会看到旧版本的模块。这对我来说发生了,我在旧的节点中有旧的 eslint,无法更新它。 - Nux
2
npm update -g 在最新版本上出现错误,请参见问题 - JBallin
我们可以使用这个命令更新到特定版本吗? - meekash55
这个升级会将软件包升级到哪个版本?我们在哪里可以设置所需的semver版本范围,例如本地软件包的package.json文件? - phil294
显示剩余3条评论

25

自动更新所有全局包到“最新”版本:

npx npm-check --global --update-all

这将会把所有全局的包更新到“最新”版本。有关npm-check的更多信息,包括执行交互式更新、排除软件包等功能。


如果您只想将全局包更新到npm outdated --global 显示的“Wanted”版本(因为全局安装的包被视为已指定caret semver范围安装):

npm update -g

最后,如果您想将软件包更新(安装)到版本'Latest'或'Wanted':

npm install --global <pkg>@<version>

截至今天:npm ERR!全局需要添加或删除选项 - dcsan
@dcsan 你的npm版本是多少?你正在运行答案中的哪个命令? 全局似乎仍然是当前文档中列出的选项。但是,一些早期的npm版本存在与其相关的错误。以下是所有链接。 https://docs.npmjs.com/cli/v7/commands/npm-install#global https://docs.npmjs.com/cli/v7/commands/npm-update#global https://github.com/npm/cli/issues/1962 - Andrew D. Bond

7
补充Mohit的回答,如果你使用的是NPM 2.6或更低版本,有几个脚本可以方便地处理这种情况的更新:https://gist.github.com/othiym23/4ac31155da23962afd0e
你需要创建两个所述的文件,并从命令提示符中运行它们。这将更新所有软件包。要进行有选择的更新,请在上面链接的页面向下滚动到Dylang于2014年10月20日的评论。以下是来自2014年11月6日的评论,可为Windows环境提供脚本。
从长期维护的角度考虑,最好的解决方案可能是先通过运行以下命令更新 NPM:
npm install npm@latest -g
有关该过程的相当全面的文档可在https://docs.npmjs.com/updating-packages-downloaded-from-the-registry找到。

0

这是我在 Powershell 中所做的:

(npm outdated -g) -split "\n" `
  | ForEach-Object {$_ -split "\s+" | Select-Object -First 1} `
  | Select-Object -Skip 1 `
  | ForEach-Object { npm install -g -U $_}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接