如何将 package.json 中的每个依赖项更新到最新版本?

How can I update each dependency in package.json to the latest version?

提问人:Raine Revere 提问时间:4/18/2013 最后编辑:Peter MortensenRaine Revere 更新时间:11/2/2023 访问量:1557075

问:

我从另一个项目中复制了package.json,现在想将所有依赖项升级到最新版本,因为这是一个新项目,如果它损坏了,我不介意修复某些东西。

最简单的方法是什么?

我知道的最好的方法是运行然后手动更新每个依赖项。一定有更好的方法。npm info express versionpackage.json

{
  "name": "myproject",
  "description": "my node project",
  "version": "1.0.0",
  "dependencies": {
    "express": "^3.0.3", // how do I get these bumped to latest?
    "mongodb": "^1.2.5",
    "underscore": "^1.4.2"
  }
}

有关特定于 Yarn 的解决方案,请参阅此 Stack Overflow 问题。

节点.js npm

评论

3赞 Alexander Mills 10/27/2016
这里需要一些更好的答案。显然,通过依赖项解析,您不可能总是拥有所有内容的最新版本。最大化最大数量的最新版本模块只是某种优化问题。但是 NPM 不知道您希望哪些模块比其他模块更新。如果有这样的东西,那就太酷了:npm update --latest x y z,其中 x y z 是您希望尽可能更新的模块,所有其他模块都将遵循其最新的兼容版本。
3赞 Raine Revere 10/27/2016
npm 将通过为每个依赖项下载正确的版本来正确处理共享依赖项之间的版本冲突。因此,如果 Dep A 依赖于 Dep C v1.0.0,而 Dep B 依赖于 Dep C v2.0.0,则它们都将得到适当的安装和使用。因此,您可以自由安装您想要的任何软件包中的最新软件包。
0赞 miorey 8/23/2019
尝试以下操作来强制升级:npm outdated | sed '1d; s/ .*/@latest/' | xargs npm i --save
0赞 Zach Smith 9/9/2019
我一直在检查这个答案。但我看到它在谷歌结果中已经下滑了。希望这条评论将有助于推动它的相关性!
0赞 akauppi 11/24/2019
@RaineRevere 似乎在 2017 年发生了一些事情 (npm 5.0)。你会这么好心地检查 stackoverflow.com/questions/16525430/ 吗......也许还能添加一个参考?下面的一些答案提到了“npm outdated”和“nom update”,但它们已经尘埃落定。我通过搜索找到了您的问题,但另一个似乎更及时。

答:

3305赞 josh3736 4/18/2013 #1

看起来 npm-check-updates 是现在实现这一目标的唯一方法。

npm i -g npm-check-updates
ncu -u
npm install

或者使用 npx(这样你就不必安装全局包了):

npx npm-check-updates -u
npm install 

在 npm <3.11 上:

只需将每个依赖项的版本更改为 ,然后运行 。(注意:在 npm 的最新版本 (3.11) 中损坏)。*npm update --save

以前:

  "dependencies": {
    "express": "*",
    "mongodb": "*",
    "underscore": "*",
    "rjs": "*",
    "jade": "*",
    "async": "*"
  }

后:

  "dependencies": {
    "express": "~3.2.0",
    "mongodb": "~1.2.14",
    "underscore": "~1.4.4",
    "rjs": "~2.10.0",
    "jade": "~0.29.0",
    "async": "~0.2.7"
  }

当然,这是更新依赖项的钝锤。如果——正如你所说——项目是空的,没有什么可以破坏的,那也没关系。

另一方面,如果你正在一个更成熟的项目中工作,你可能希望在升级之前验证你的依赖项中没有重大更改。

要查看哪些模块已过时,只需运行 npm outdated。它将列出具有较新版本可用的任何已安装依赖项。

有关 Yarn 特定的解决方案,请参阅此 Stack Overflow 答案

评论

16赞 josh3736 8/1/2013
@thefourtheye:您通常不应该保留package.json因为您最终可能会自动安装新的模块版本,其中包含破坏您的应用程序的重大更改。由于我们在这里使用,因此 替换为每个包的当前版本。*--save*
53赞 davidtheclark 12/10/2013
我无法让它工作。自从这个答案发布以来,npm 有什么变化吗?当我使用通配符时,通配符留在我的 .npm install --savepackage.json
16赞 davidtheclark 12/31/2013
不幸的是,对我来说,使用也不起作用。我仍然保留通配符。有没有你所知道的关于这方面的文档,或者我可能会查看的任何其他资源?update
131赞 RaphaelDDL 1/15/2014
有点旧,但可能会对其他人有所帮助:github.com/tjunnone/npm-check-updates |用于安装,然后检查依赖项是否有更新,并更新package.json版本。然后它只是,它会下载新版本。npm install -g npm-check-updatesnpm-check-updatesnpm-check-updates -unpm install
7赞 adriendenat 8/20/2014
您的问题可能来自以下事实:您尝试通过键入而不是 来更新开发包。npm update --savenpm update --save-dev
75赞 Tobias Cudnik 1/22/2014 #2

这从 npm 1.3.15 开始工作。

"dependencies": {
  "foo": "latest"
}

评论

16赞 Raine Revere 2/8/2014
很高兴知道。我的猜测是,这在任何生产站点上通常都是一种不好的做法,因为它会自动更新到可能向后不兼容的版本。“~2”语法将您锁定在给定的主版本号中,该版本号在 semver 之后将向后兼容。
1赞 Tobias Cudnik 2/21/2014
您可以随时在 prod 上冻结 deps。有一个命令。-2 听起来还不错。
5赞 SavoryBytes 7/18/2014
我喜欢用它来冻结 deps。npm shrinkwrap
0赞 theprogrammer 2/20/2020
如果我们这样做,那么我们如何知道该包的实际版本?假设我调用了一个条目,然后我添加了 latest 并运行了,在此之后我如何找到我的项目中现在有哪个版本的 react?因为是我package.json里剩下的东西,即使在我这样做之后也不是一个数字"react": "16.9.0"npm i"react":"latest"npm i
1332赞 Etienne 4/4/2014 #3

npm-check-updates是一个实用程序,可自动调整具有所有依赖项最新版本的package.json文件。

请参阅 npm-check-updates

npm install -g npm-check-updates
ncu -u
npm install

如果您有现代版本,则侵入性稍小(避免全局安装)的方法是:npm

npx npm-check-updates -u
npm install

评论

201赞 Mohammad Arif 5/17/2014
这应该可以通过 npm 命令本身本机获得,这确实是迄今为止更新依赖项的最佳解决方案。
7赞 Stefan 6/24/2014
应该是原生 npm 的一部分,完全同意。然而,事实并非如此,这个解决方案来得轻而易举。谢谢。
3赞 enorl76 1/29/2015
我假设你们这些家伙正在推动 [HARD] 将其放入核心 npm?
3赞 Muzaffer 12/17/2015
@Batman 是的,如果您之前没有安装。否则,请使用 npm update。NCU 只是更新package.json。它不会安装或更新“node_modules”。
4赞 SINGULARITY 7/21/2021
npx npm-check-updates -u是我的答案
2赞 Haven 4/13/2014 #4

另一种选择是

"dependencies":{
    "foo" : ">=1.4.5"
}

每次使用 npm update 时,它都会自动更新到最新版本。

有关更多版本语法,您可以在此处查看:https://www.npmjs.org/doc/misc/semver.html

评论

0赞 Raine Revere 4/14/2014
版本控制的一个原因是防止较新的主要版本发生向后不兼容的更改。我建议不要使用这个或“*”版本号。OP 与简化流程有关,同时保持对流程发生时间的控制。
0赞 Peter Mortensen 11/2/2023
链接已断开 (404)。
18赞 andxyz 4/29/2014 #5

我最近不得不更新几个使用 npm 和 package.json 的项目来实现他们的 gruntfile.js魔力。以下 Bash 命令(多行命令)对我来说效果很好:

npm outdated --json --depth=0 | \
jq --ascii-output --monochrome-output '. | keys | .[]' | \
xargs npm install $1 --save-dev

这里的想法:

将输出作为 JSON 通过管道传递给 jq(jq 是 JSON 命令行解析器/查询工具) (注意 的参数用法)。npm outdated--depthnpm outdated

JQ 会将输出剥离到仅顶级包名称。 最后,xargs 将每个 LIBRARYNAME 一次放入一个命令中。npm install LIBRARYNAME --save-dev

以上是在运行的机器上对我有用: 节点=v0.11.10 osx=10.9.2 npm=1.3.24

这需要: xargs(我相信是我的机器原生的) 和 jq(我用 .brew install jq

注意:我只使用 保存更新的库以package.json JSON 密钥内。这是我的项目的要求,很可能不是你的。devDependancies--save-dev

之后,我用一个简单的检查所有东西都是肉汁

npm outdated --depth=0

此外,您可以使用以下命令检查当前已安装的顶级库版本

npm list --depth=0

评论

0赞 Qorbani 11/10/2014
我喜欢 jq 并且几乎每天都使用它,但为此,我改用 simple:awknpm outdated --depth=0 | grep -v "^Package" | awk '{print $1}' | xargs npm install $1 --save-dev
1赞 Richard Ayotte 10/14/2015
我一直在使用cat package.json|jq -r '.devDependencies|keys|map(.+"@latest")|@sh'|xargs npm install --save-dev
0赞 Peter Mortensen 11/2/2023
回复devDependancies:[原文如此]。它真的存在吗?不是devDependencies
234赞 laconbass 4/30/2014 #6

要将一个依赖项更新到其最新版本,而不必手动打开并更改它,您可以运行package.json

npm install {package-name}@* {save flags?}

npm install express@* --save

此流程与工作区兼容,即

npm --workspace some/package install express@*

作为参考,npm-install


注意:某些 npm 版本可能需要 latest 标志,即npm install express@latest


正如用户 Vespakoen 在被拒绝的编辑中指出的那样,也可以通过这种方式一次更新多个包:

npm install --save package-nave@* other-package@* whatever-thing@*

他还为 shell 指定了基于 的单行代码。有关代码和说明,请参阅编辑npm outdated


PS:我也讨厌必须手动编辑这样的事情;)package.json

评论

9赞 CatDadCode 4/4/2015
这个解决方案很棒。快速简便的方法,无需安装任何新模块即可将单个软件包显式更新到最新版本。我喜欢 npm-check-updates,但 afaik 它试图使所有包保持最新,这并不总是您想要的。
2赞 cambunctious 10/20/2016
用于显示每个包是依赖项还是 devDependency。用于另存为 devDependency。npm outdated -lnpm install --save-dev
1赞 Raine Revere 12/27/2016
@Chev:NCU 可以很容易地将单个或多个包作为目标。您还可以排除带有 的包。我同意以上是更新单个软件包的最简单解决方案。ncu express mocha chaincu -x mocha
4赞 Drew Thomas 8/21/2018
我只是使用了类似的东西,可能来自最近的文档......使用“latest”而不是“*”npm install {package-name}@latest {save flags}
2赞 Dany Wehbe 11/20/2018
非常感谢,这个解决方案很棒,正是我正在寻找的。它允许您更新特定的包,而无需更新可能导致不可预见的问题的所有其他依赖项!
5赞 gleb bahmutov 11/3/2014 #7

前面答案中的命令是不安全的,因为在切换版本时可能会损坏模块。 相反,我建议以下几点:

  • 使用命令将实际的当前 Node.js 模块版本设置为package.jsonnpm shrinkwrap
  • 使用 next-update 命令行工具将每个依赖项更新到最新版本(如果它没有中断测试
npm install -g next-update
// from your package
next-update

评论

1赞 Raine Revere 12/13/2014
对于活动项目,确实需要防止向后不兼容的更改。OP 更关心的是启动一个新项目,在这个项目中,您希望现在而不是以后打破事物,并拥有最新版本来工作。
0赞 Peter Mortensen 11/2/2023
回复“下一次更新命令行工具”:大概是你写的?这应该被揭示出来。相关新闻(帮助中心): 如何不成为垃圾邮件发送者
74赞 Mr. Sun Lin 1/23/2015 #8
  1. 用作最新版本的版本,包括 unstable*
  2. 用作最新稳定版本的版本定义latest
  3. 使用 LatestStablePackages 使用最新的稳定版本号修改package.json

下面是一个示例:

"dependencies": {
        "express": "latest"  // using the latest STABLE version
    ,   "node-gyp": "latest"    
    ,   "jade": "latest"
    ,   "mongoose": "*" // using the newest version, may involve the unstable releases
    ,   "cookie-parser": "latest"
    ,   "express-session": "latest"
    ,   "body-parser": "latest"
    ,   "nodemailer":"latest"
    ,   "validator": "latest"
    ,   "bcrypt": "latest"
    ,   "formidable": "latest"
    ,   "path": "latest"
    ,   "fs-extra": "latest"
    ,   "moment": "latest"
    ,   "express-device": "latest"
},

评论

3赞 Peza 9/10/2018
这是最好的答案。
0赞 klewis 1/22/2020
仍然是最安全的方法。好答案。
0赞 tim-montague 6/7/2022
“latest”还会阻止package.json每次包版本号更改时对 Git 提交历史记录造成的捶打。唯一的缺点是,在生产版本中,我们需要冻结软件包版本号,这样构建就不会中断。尽管我们也许可以将“latest”替换为实际的 semvar 值,但通过package.json使用类似 .npm run build
0赞 tim-montague 6/7/2022
不确定是否是冻结生产版本版本号的方法。但是要将“最新”转换为精确的 semvar 数字,可以使用类似 in package.json 的东西。npm shrinkwrap"scripts": { "build" : "npx --yes npm-check-updates --upgrade" }
48赞 Tyler Davis 2/12/2015 #9

我发现的最佳答案中唯一需要注意的是,它将模块更新到最新版本。这意味着它可能会更新到不稳定的 alpha 版本。

我会使用那个npm-check-updates实用程序。 我的小组使用了这个工具,它通过安装稳定更新有效地工作。

正如 Etienne 所说:安装并运行这个:

npm install -g npm-check-updates
npm-check-updates -u
npm install

评论

4赞 Michael Cole 6/3/2015
rm -rf node_modules之前为我摆脱了一些依赖警告。npm install
1赞 igorpavlov 11/3/2015
以防万一package.json中有“*”,只需在运行 npm-check-updates 之前将其更改为“0”或“0.0”或“0.0.0”。
0赞 isherwood 6/3/2022
您应该直接链接到“上面的最佳答案”的任何内容。虽然你的答案是独立的,但这个解释并不清楚。
459赞 Michael Cole 6/3/2015 #10

针对 npm v2+ 进行了更新

npm 2+(节点.js 0.12+):

npm outdated
npm update
git commit package-lock.json

古代 npm(约 2014 年):

npm install -g npm-check-updates
npm-check-updates
npm shrinkwrap
git commit package-lock.json

一定要收缩你的依赖项,否则你可能会得到一个死项目。前几天我拿出了一个项目,但它无法运行,因为我的依赖项都过时/更新/一团糟。如果我进行了收缩包装,npm 将完全安装我需要的东西。


对于走到这一步的好奇者,以下是我的建议:

使用 或 建议最新版本。npm-check-updatesnpm outdated

# `outdated` is part of newer npm versions (2+)
npm outdated

# If you agree, update.
npm update

#       OR

# Install and use the `npm-check-updates` package.
npm install -g npm-check-updates

# Then check your project
npm-check-updates

# If you agree, update package.json.
npm-check-updates -u

然后进行全新安装(没有 rm 我收到了一些依赖警告)

rm -rf node_modules
npm install

最后,将确切的版本保存到npm-shrinkwrap.jsonnpm shrinkwrap

rm npm-shrinkwrap.json
npm shrinkwrap

现在,现在将在npm installnpm-shrinkwrap.json

如果签入 Git,所有安装都将使用完全相同的版本。npm-shrinkwrap.json

这是一种从开发(所有更新,所有时间)过渡到生产(没有人接触任何东西)的方法。

P.S.:Yarn 正在将您的包裹列表发送到 Facebook

评论

1赞 Michael Cole 1/1/2016
确实。如果你创建并进入源代码,并在每次更新时提交,你总是可以“回到原来的位置”。当我开始时,我忽略了收缩包装功能。npm-shrinkwrap.json
34赞 gman 9/27/2016
并不能回答这个问题。问题是如何更新最新版本。 仅更新到 Semver 版本,而不是最新版本。npm update
0赞 John B 6/4/2018
如果 npm update 真的更新package.json,那就太好了。根据 github.com/npm/npm/issues/13555 这是一个 2 年后未修复的错误。npmjs.com/package/npm-check-updates 是目前要走的路
27赞 SavoryBytes 3/4/2016 #11

下面是一个基本的正则表达式,用于匹配语义版本号,以便您可以快速将它们全部替换为星号。

语义版本正则表达式

([>|<|=|~|^|\s])*?(\d+\.)?(\d+\.)?(\*|\d+)

如何使用

在 JSON 文件中选择要替换的包版本。

screenshot:select the text you want to replace

输入上面的正则表达式,并验证它是否与正确的文本匹配。

screenshot:input the semver regex above

将所有匹配项替换为星号。

screenshot:replace package versions with an asterisk

npm update --save

评论

1赞 rofrol 9/15/2017
当包名称中有数字时,不会。即:babel-preset-es2015、babel-preset-stage-0、hex2rgba。也许在开头搜索引号/双引号:('|")([>|<|=|~|^|\s])*?(\d+\.)?(\d+\.)?(\*|\d+)
1赞 Ivan Castellanos 9/18/2017
在任何支持多个插入符号(ej Sublime Text)的编辑器上,您可以选择第一个插入符号并按多次,直到全部选择它们,然后转到版本号(按向右箭头 2 次)并按 Ctrl 空格键,然后写入:ctrl+d"*"
2赞 Alexey Vol 4/27/2016 #12

无需额外软件包的解决方案

将每个依赖项的版本更改为:*

"dependencies": {
    "react": "*",
    "react-google-maps": "*"
  }

然后运行 .npm update --save

您的一些软件包已更新,但有些没有更新?

"dependencies": {
    "react": "^15.0.1",
    "react-google-maps": "*"
  }

这是棘手的部分,这意味着您的本地版本“react”低于最新版本。在本例中,npm 下载并更新了“react”包。但是,您的本地版本“react-google-maps”与最新版本相同。

如果您仍然想“更新”不变,则必须从文件夹中删除这些模块。*node_modules

例如,删除 .node_modules/react-google-maps

终于再跑一次了。npm update --save

"dependencies": {
    "react": "^15.0.1",
    "react-google-maps": "^4.10.1"
  }

如果要更新开发依赖项,请不要忘记运行。npm update --save-dev

13赞 David Braun 5/28/2016 #13

使用 Updtr

基于 npm outdated,updtr 安装最新版本并为每个依赖项运行 npm test。如果测试成功,updtr 会将新版本号保存到package.json。但是,如果测试失败,updtr 将回滚其更改。

2赞 Luca Steeb 1/9/2017 #14

Greenkeeper(如果您使用的是 GitHub)。

这是一个 GitHub 集成,设置起来非常容易。安装后,它会自动在你指定的存储库中创建拉取请求(如果需要,也可以创建所有请求),并使你的代码始终保持最新状态,而不会强迫你手动执行任何操作。然后,PR 应该在 CI 服务上触发生成,并且根据检查成功或失败,您可以不断找出触发问题的原因,或者 CI 何时通过,只需合并 PR

Greenkeeper PR 1 Greenkeeper PR 2

在底部,您可以看到第一次构建首先失败,在提交(“升级到节点 v6.9”)后,测试通过,因此我最终可以合并 PR。它也带有很多表情符号。

另一种选择是 https://dependencyci.com/,但我没有对其进行密集测试。乍一看,Greenkeeper 总体上看起来更好,IMO,并且具有更好的集成性。

评论

0赞 Peter Mortensen 9/1/2023
"Greenkeeper 已经说再见了"
0赞 Luca Steeb 9/2/2023
绝对不再是一个相关的选择:D
1赞 webkitfanz 1/16/2017 #15
  • npm 已过时
  • npm 更新

应该为您提供与您的应用程序兼容的最新所需版本。但不是最新版本。

212赞 GollyJer 3/28/2017 #16

如果您碰巧使用 Visual Studio Code 作为 IDE,这是一个有趣的小扩展,可以使更新过程一键完成。package.json

注意:更新package.json文件中的软件包后,运行 npm update 以安装新版本。

版本镜头

enter image description here

GitLab 存储库

评论

2赞 Alexander Kim 5/24/2018
这里有崇高的文本 3 版本:github.com/yavorsky/Bump,虽然有点慢。
17赞 MattG 6/8/2018
工作得很好,如果任何人都不清楚,这只是根据最新的 npm 存储库版本检查package.json中的版本,并允许您单击版本以更新package.json中的文本内容。然后,您需要运行“npm update”来告诉 npm 安装新版本。
7赞 Gürol Canbek 8/26/2018
请注意,通过将鼠标悬停在包条目上,已经可以在内置 Visual Studio Code 中查看最新版本的包依赖项以及简要说明: 内置包版本提示
4赞 RA. 8/31/2019
请注意,单击代码镜头链接时,它不会自动安装包!它只是更新package.json版本文本。
1赞 Lucas Coelho 6/12/2023
这为我节省了很多时间,我必须更新项目中的所有依赖项。谢谢
43赞 goksel 4/17/2017 #17

我用它来实现这一目标。npm-check

npm i -g npm npm-check
npm-check -ug # To update globals
npm-check -u # To update locals

Enter image description here

另一个有用的命令列表,它将在package.json中保留确切的版本号:

npm cache clean
rm -rf node_modules/
npm i -g npm npm-check-updates
ncu -g # Update globals
ncu -u # Update locals
npm I

如果您使用的是 Yarn,则可以使用。yarn upgrade-interactive --latest

评论

3赞 goksel 7/14/2022
yarn upgrade-interactive --latest现在是更好的选择
0赞 Qwerty 8/20/2023
那不会安装最新的 Major 吗?这通常不会更好。
21赞 Sibiraj 6/1/2017 #18

此功能已在 npm v5 中引入。使用 和 更新package.json更新 npm:npm install -g npm@latest

  1. 删除文件夹node_modulespackage-lock.json(如果有)

  2. 跑。这会根据语义版本控制package.json 中的依赖项更新到最新版本。npm update

要更新到最新版本,您可以使用 .npm-check-updates

9赞 Yangshun Tay 6/13/2017 #19

如果您使用的是 ,yarn upgrade-interactive 是一个非常时尚的工具,可以让您查看过时的依赖项,然后选择要更新的依赖项。yarn

使用 Yarn 的更多理由。嘿。npm

评论

0赞 vhs 9/10/2017
Yarn 发展迅速,已经达到了 1.0,使用起来非常愉快。这应该是新选择的答案。
3赞 Vandesh 1/13/2020
不更新 - github.com/yarnpkg/yarn/issues/4390 中的依赖项package.json
0赞 DevLoverUmar 7/4/2021
@JoshHabdas您可以按照以下线程获取 Yarn 特定解决方案。stackoverflow.com/questions/62650640/......
6赞 krunal shah 8/4/2017 #20

如果您使用的是 npm 5 和 Node.js 8,请尝试以下命令:

npm update --save

评论

3赞 Álvaro González 1/17/2018
该命令似乎没有超出原始定义的依赖关系。如果完全声明,您将不会得到.这可能是好事,也可能是坏事:)updatepackage.json"1.2.3"1.2.4
60赞 manncito 8/23/2017 #21

我真的很喜欢npm-upgrade的工作原理。它是一个简单的命令行实用程序,可以遍历您的所有依赖项,并允许您查看与最新版本相比的当前版本,并根据需要进行更新。

下面是在项目根目录(文件旁边)中运行后发生的情况的屏幕截图:npm-upgradepackage.json

npm upgrade example

对于每个依赖项,您可以选择升级、忽略、查看更改日志或完成该过程。到目前为止,它对我来说效果很好。

需要明确的是,这是一个第三方软件包,需要先安装该命令才能正常工作。它不附带 npm 本身:

npm install -g npm-upgrade

然后,从具有 package.json 文件的项目的根目录:

npm-upgrade

评论

2赞 Grandizer 5/24/2018
嗯,对我不起作用,但确实对我有用,它更新了我的package.json文件,这正是我想要的。npm-upgradenpm upgrade
0赞 manncito 5/25/2018
嗯,有意思,有错误吗?使用背后的想法是,您可以确切地看到正在升级的内容,并选择升级的内容。 对大多数人来说可能工作正常,但有时您在升级时需要有更多的控制权。npm-upgradenpm upgrade
0赞 Dan Dascalescu 7/25/2018
@Grandizer:是 的别名,所以它们之间应该没有区别。但是,npm 6.2.0 有问题,可能无法package.jsonupgradeupdate
2赞 x-ray 2/27/2019
您也可以将其与 npx 一起使用: - 很酷!:)npx npm-upgrade
0赞 Peter Mortensen 9/1/2023
请查看为什么在提问时不上传代码/错误的图像?(例如,“图像只能用于说明无法通过任何其他方式阐明的问题,例如提供用户界面的屏幕截图。提前致谢。
9赞 Ogglas 11/1/2017 #22

我必须用来更新的命令:package.jsonNPM 3.10.10

npm install -g npm-check-updates
ncu -a
npm install

背景:

我使用的是 @josh3736 的最新命令,但我没有更新。然后我在运行时注意到描述文本:package.jsonnpm-check-updates -u

以下依赖项由其声明的版本范围满足, 但是安装的版本落后了。您可以安装最新的 版本,而不使用 npm update 修改包文件。如果 无论如何,您都想更新包文件中的依赖项,请运行 ncu -一个。

阅读 npm-check-updates 的文档,您可以看到差异:

https://www.npmjs.com/package/npm-check-updates

-u, --upgrade: 覆盖包文件

-a, --upgradeAll:甚至包括那些最新版本满足声明的 semver 依赖项的依赖项

NCU 是键入时消息中所示的别名:npm-check-updatesnpm-check-updates -u

[INFO]: You can also use ncu as an alias

评论

0赞 Raine Revere 5/1/2019
在 npm-check-updates v3 中,是默认行为,覆盖package.json仅留给选项。-a-u
64赞 StepUp 12/7/2017 #23

若要查看哪些包有较新的版本可用,请使用以下命令:

npm outdated

若要仅更新一个依赖项,只需使用以下命令:

npm install yourPackage@latest

例如:

我的文件有依赖项:package.json

"@progress/kendo-angular-dateinputs": "^1.3.1",

那么我应该写:

npm install @progress/kendo-angular-dateinputs@latest

--save-dev 是什么意思?

npm install @progress/kendo-angular-dateinputs@latest --save-dev

正如 npm install docs 所说:

-D, --save-dev:包将出现在 devDependencies 中。

评论

0赞 Burrich 7/28/2018
不错,但看起来 --save(或 --save-dev)不是更新的强制性要求。
0赞 StepUp 3/17/2021
@Burrich是的,你是对的!请看我更新的答案!谢谢!
0赞 Joe 5/10/2022
这如何回答“更新每个依赖项”的问题?这不是按依赖项手动解决,而不是更新所有依赖项的解决方案吗?和最新的主要版本?
4赞 inf3rno 2/26/2018 #24

下面的代码(被接受)给我写了类似“它花了太长时间等等”之类的东西,什么也没做。可能使用全局标志是问题所在,idk。

npm i -g npm-check-updates
ncu -u
npm install

我决定使用我的文本编辑器并遵循半手动方法。

我将这样的列表(只是更长)从我的开发依赖项复制到记事本++文本编辑器:package.json

"browserify": "10.2.6",
"expect.js": "^0.3.1",
"karma": "^0.13.22",
"karma-browserify": "^5.2.0",

我将搜索模式设置为正则表达式,使用该模式获取包名称并将其替换为 .点击“全部替换”。错误是这样的:^\s*"([^"]+)".*$npm uninstall \1 --save-dev \nnpm install \1 --save-dev

npm uninstall browserify --save-dev 
npm install browserify --save-dev
npm uninstall expect.js --save-dev 
npm install expect.js --save-dev
npm uninstall karma --save-dev 
npm install karma --save-dev
npm uninstall karma-browserify --save-dev 
npm install karma-browserify --save-dev

我把它复制回bash并按回车键。一切都升级了,工作正常。就这样。

"browserify": "^16.1.0",
"expect.js": "^0.3.1",
"karma": "^2.0.0",
"karma-browserify": "^5.2.0",

我认为这没什么大不了的,因为您只需要时不时地这样做,但您可以轻松地编写一个脚本,该脚本可以解析并升级您的软件包。我认为这种方式更好,因为如果您需要一些特殊的东西,例如保留库的当前版本,您可以编辑您的列表。package.json

评论

1赞 Raine Revere 5/1/2019
使用 npm-check-updates 时,挂起终端是 Windows 上的一个已知问题。尝试添加,以便知道不要等待 stdin。--packageFile package.json
0赞 inf3rno 5/2/2019
@RaineRevere谢谢!
17赞 fotijr 4/17/2018 #25

如果使用 Yarn,则以下命令会将所有包更新到最新版本:

yarn upgrade --latest

他们的文档中:

该命令升级的软件包与 upgrade 命令相同,但会忽略 package.json 中指定的版本范围。相反,将使用 latest 标记指定的版本(可能会跨主要版本升级包)。upgrade --latest

评论

3赞 Vandesh 1/13/2020
不更新 - github.com/yarnpkg/yarn/issues/4390 中的依赖项package.json
0赞 DevLoverUmar 10/21/2020
@Vandesh 请参考此 YARN 特定线程 stackoverflow.com/questions/62650640/...
7赞 Sunil 5/22/2018 #26

我通过使用npm-check-updates的说明解决了这个问题:

npm install -g npm-check-updates
ncu
ncu -u # To update all the dependencies to the latest
ncu -u "specific module name"  # In case you want to update specific dependencies to the latest
22赞 TWright 11/27/2018 #27

如果你想通过一个漂亮的(用于终端的)交互式报告界面使用一种温和的方法,我建议使用 npm-check

它不是一把锤子,而是让你对依赖项更新有更重要的了解和控制。

为了让你了解等待什么,这里有一个屏幕截图(从 git 页面抓取的 npm-check):

enter image description here

评论

0赞 Peter Mortensen 9/1/2023
请查看为什么在提问时不上传代码/错误的图像?(例如,“图像只能用于说明无法通过任何其他方式阐明的问题,例如提供用户界面的屏幕截图。做正确的事情(它也涵盖了答案)。提前致谢。
21赞 ilyakam 2/2/2019 #28

从 npm 版本 5.2.0 开始,有一种方法可以在一行中运行它,而无需将任何其他包安装到全局 npm 注册表或本地应用程序。这可以通过利用与 npm 捆绑在一起的新实用程序来完成。(点击这里了解更多。npx)

在项目的根目录中运行以下命令:

npx npm-check-updates -u && npm i
1赞 Mike 2/18/2019 #29

使用 NPM 脚本可以自动更新:

{
    "_cmd-update-modules": "npm run devops-update-modules",
    "scripts": {
        "create-global-node-modules-folder": "if not exist \"%appdata%\\npm\\node_modules\" mkdir %appdata%\\npm\\node_modules",
        "npm-i-g": "npm i npm@latest -g",
        "npm-check-i-g": "npm i npm-check@latest -g",
        "eslint-i-g": "npm i eslint@latest -g",
        "npm-check-u-l": "npm-check \"C:\\Program Files\\nodejs\\node_modules\\npm\" -y",
        "npm-check-u-g": "npm-check \"C:\\Program Files\\nodejs\\node_modules\\npm\" -y -g",
        "npm-deep-update-l": "npm update --depth 9999 --dev",
        "npm-deep-update-g": "npm update --depth 9999 --dev -g",
        "npm-cache-clear": "npm cache clear --force",
        "devops-update-modules": "npm run create-global-node-modules-folder && npm run npm-i-g && npm run npm-check-i-g && npm run eslint-i-g && npm run npm-check-u-l && npm run npm-check-u-g && npm run npm-deep-update-l && npm run npm-deep-update-g && npm run npm-cache-clear"
    }
}

有关更多详细信息和分步手册:如何自动更新所有 Node.js 模块?

5赞 miqrc 4/27/2019 #30

我为最新版本的 NPM 找到了另一种解决方案。我想用显式的最新版本号替换所有“*”依赖项。所讨论的方法都不适合我。

我做了:

  1. 将所有“*”替换为“^0.0.0”
  2. npm-check-updates -u

现在package.json中的所有内容都已更新到最新版本。

0赞 Sumomo 4/29/2019 #31

到目前为止,最简单的方法是使用 pnpm 而不是 npm,然后简单地键入:

pnpm update --latest

6赞 Yukulélé 6/23/2019 #32

如果你不想安装全局 npm-check-updates,你可以简单地运行它:

node -e "const pk = JSON.parse(require('fs').readFileSync('package.json', 'utf-8'));require('child_process').spawn('npm', ['install', ...Object.keys(Object.assign({},pk.dependencies, pk.devDependencies)).map(a=>a+'@latest')]).stdout.on('data', d=>console.log(d.toString()))"

评论

0赞 David Roth 11/7/2021
爱上它!最佳答案在这里。一次性任务不需要不需要的依赖项。谢谢你,善良的先生!
0赞 vlatko606 2/24/2023
此命令不适用于我们 @Node.js v18.14.1 + Windows
6赞 Andrei Gec 9/28/2020 #33

如果你正在寻找一个不涉及安装 npm 包的更简单的解决方案,我会结帐 updatepackagejson.com

updatepackagejson.com

28赞 Chukwuemeka Maduekwe 10/30/2020 #34

安全更新

  1. 用于发现过期的依赖项。npm outdated

  2. 用于执行安全的依赖项升级。npm update

  3. 用于升级到软件包的最新主要版本。npm install <packagename>@latest

突发性更新

  1. 用。npx npm-check-updates -u

  2. npm install将所有依赖项升级到其最新的主要版本。

评论

2赞 Alex 8/11/2021
答案中列出的命令不正确,并且会出错。请注意,这真的应该是.npm install @latestnpm install <PACKAGE>@latest
0赞 Kieran Ryan 4/19/2023
对我和我的 macbook 都很好用
4赞 NetOperator Wibby 4/28/2022 #35

对我来说,90% 的答案是“使用”的某种变体,这对我来说很疯狂。这是我所做的(相关代码):npm-check-updates

{
  "devDependencies": {
    "updates": "^13.0.5" // the version here could be "latest" or "*" tbh...
  },
  "scripts": {
    "test:dependencies": "updates --update ./",
  }
}

运行(或调用任何依赖项更新脚本)将检查列出的每个包的最新版本,并会通知您最新版本何时发布。在那之后运行,您将获得最新信息!npm run test:dependenciespackage.jsonnpm i

此外,与 npm-check-updates 不同,updates 的依赖项为零(在撰写本文时,ncu 有 29 个)。

评论

0赞 Peter Mortensen 9/1/2023
为什么是狂野的?
0赞 kozlovd 7/9/2022 #36

这可能会有所帮助:

npm outdated | awk '{ if (NR>1) {print $1"@"$4} }' | xargs npm i

0赞 Ubuntu4Life 9/20/2022 #37

扩展 kozlovd 的答案,我构建了一个 Bash 脚本,通过两个步骤更新任何 npm 脚本:

  1. 这为您提供了 npm 包的数量,如果您遇到错误,请手动计算它们。

    npm list | wc -l

  2. 在这里,将 NUM_PKGS 替换为包的数量,如果您在上一个命令中遇到“UNMET DEPENDENCY”错误,请将 $2 替换为 $4。

    NUM_PKGS=9999; npm list --no-unicode | awk -v NUM_PKGS=$NUM_PKGS '{\
        if (NR>1 && NR <NUM_PKGS) {\
            pver=A[split($2,A,"@")];\
            print substr($2,0,length($2)-length(pver))"latest";\
        }\
    }' | xargs -r npm i
    

解释: 命令 2 首先获取包名称,并且仅在出现“UNMET DEPENDENCY”错误时对它们的行进行操作,然后 AWK 遍历每个包名称,获取版本值并将其替换为“latest”,最后,所有被替换版本的包都由 xargs 收集,xargs 将它们连接在“npm i”之后,以最终使用最新版本安装所有这些包。

这些步骤可以使用没有设置版本或现有项目的包更新新项目。

6赞 husayt 10/20/2022 #38

因为从最初的问题到现在已经快 10 年了,而且许多答案要么已经过时,要么不推荐。

我会使用与包管理器无关的东西,即可以与 npm、pnpm、Yarn 或其他一起使用。

最近我一直在使用 taze

您可以将其添加到开发依赖项中并从那里运行,也可以使用 或 等不安装即可运行。npx tazepnpx taze

3赞 mattpr 12/9/2022 #39

无需为一次性用例安装另一个 Node.js 模块,只需在 shell 中执行此操作...

npm install $(npm outdated | tail -n +2 | awk '{print $1}' | sed -e 's/$/@latest/g' | tr '\n' ' ')
-2赞 raddevus 2/7/2023 #40

在 2023 年,我只是使用了:

npm update

此时会更新许多软件包,但您可能会收到一条消息,指出某些软件包需要修复。在那种情况下,我跑了:

npm audit fix --force

最后,为了确保它全部安装,我运行:

npm install

就是这样;我的包裹已更新。
无需手动编辑配置文件。

评论

0赞 Raine Revere 2/8/2023
npm update不升级到最新版本。它只会升级到package.json中给出的版本范围。
0赞 raddevus 2/9/2023
@RaineRevere 有趣。不知道我的软件包是如何更新到较新版本的。你知道在只运行 npm update 后会发生什么吗?另外,您是说更新到较新版本的唯一方法是手动更改package-lock.json?如果在 2023 年仍然如此,那么 npm 绝对是一个失败的包系统。谢谢
0赞 Raine Revere 2/9/2023
npm update --save将package.json依赖项升级到较新版本,前提是它们属于指定的版本范围。例如,可以升级到 但不能 .^1.0.0^1.1.0^2.0.0
0赞 Raine Revere 2/9/2023
有几种方法可以升级依赖项,如本页的答案所示,但没有一种是 npm 内置的。永远不会手动编辑,而是在运行 或 时从 your 自动生成。这只会反映你所拥有的。因此,这里的主要关注点是如何升级超出其指定版本范围的依赖项。package.jsonpackage-lock.jsonpackage.jsonnpm installnpm updatepackage-lock.jsonpackage.jsonpackage.json
0赞 Corno 3/2/2023 #41

我发现npm-check-updates运行良好,但它的依赖项非常重(目前有312个包)。

我创建了一个有限但非常轻量级(无依赖项)工具来更新依赖项:npm-updatedependencies2latest

也许这对其他人来说也是一个很好的解决方案。

2赞 tom 5/27/2023 #42

有一个在线package.json更新工具。也可以通过下拉列表选择版本。

它还更新到主要版本,npm 过时和 ncu 不这样做。

package.json内容粘贴到输入字段中,并让它解析:

Enter image description here

输出如下所示:

Enter image description here