提问人:Raine Revere 提问时间:4/18/2013 最后编辑:Peter MortensenRaine Revere 更新时间:11/2/2023 访问量:1557075
如何将 package.json 中的每个依赖项更新到最新版本?
How can I update each dependency in package.json to the latest version?
问:
我从另一个项目中复制了package.json,现在想将所有依赖项升级到最新版本,因为这是一个新项目,如果它损坏了,我不介意修复某些东西。
最简单的方法是什么?
我知道的最好的方法是运行然后手动更新每个依赖项。一定有更好的方法。npm info express version
package.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 问题。
答:
看起来 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 答案。
评论
*
--save
*
npm install --save
package.json
update
npm install -g npm-check-updates
npm-check-updates
npm-check-updates -u
npm install
npm update --save
npm update --save-dev
这从 npm 1.3.15 开始工作。
"dependencies": {
"foo": "latest"
}
评论
npm shrinkwrap
"react": "16.9.0"
npm i
"react":"latest"
npm i
npm-check-updates
是一个实用程序,可自动调整具有所有依赖项最新版本的package.json文件。
npm install -g npm-check-updates
ncu -u
npm install
如果您有现代版本,则侵入性稍小(避免全局安装)的方法是:npm
npx npm-check-updates -u
npm install
评论
npx npm-check-updates -u
是我的答案
另一种选择是
"dependencies":{
"foo" : ">=1.4.5"
}
每次使用 npm update 时,它都会自动更新到最新版本。
有关更多版本语法,您可以在此处查看:https://www.npmjs.org/doc/misc/semver.html
评论
我最近不得不更新几个使用 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
--depth
npm 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
评论
awk
npm outdated --depth=0 | grep -v "^Package" | awk '{print $1}' | xargs npm install $1 --save-dev
cat package.json|jq -r '.devDependencies|keys|map(.+"@latest")|@sh'|xargs npm install --save-dev
devDependancies
”:[原文如此]。它真的存在吗?不是“devDependencies
”?
要将一个依赖项更新到其最新版本,而不必手动打开并更改它,您可以运行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
评论
npm outdated -l
npm install --save-dev
ncu express mocha chai
ncu -x mocha
npm install {package-name}@latest {save flags}
前面答案中的命令是不安全的,因为在切换版本时可能会损坏模块。 相反,我建议以下几点:
- 使用命令将实际的当前 Node.js 模块版本设置为package.json。
npm shrinkwrap
- 使用 next-update 命令行工具将每个依赖项更新到最新版本(如果它没有中断测试)
npm install -g next-update // from your package next-update
评论
- 用作最新版本的版本,包括 unstable
*
- 用作最新稳定版本的版本定义
latest
- 使用
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"
},
评论
npm run build
npm shrinkwrap
"scripts": { "build" : "npx --yes npm-check-updates --upgrade" }
我发现的最佳答案中唯一需要注意的是,它将模块更新到最新版本。这意味着它可能会更新到不稳定的 alpha 版本。
我会使用那个npm-check-updates实用程序。 我的小组使用了这个工具,它通过安装稳定更新有效地工作。
正如 Etienne 所说:安装并运行这个:
npm install -g npm-check-updates
npm-check-updates -u
npm install
评论
rm -rf node_modules
之前为我摆脱了一些依赖警告。npm install
针对 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-updates
npm 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.json
npm shrinkwrap
rm npm-shrinkwrap.json
npm shrinkwrap
现在,现在将在npm install
npm-shrinkwrap.json
如果签入 Git,所有安装都将使用完全相同的版本。npm-shrinkwrap.json
这是一种从开发(所有更新,所有时间)过渡到生产(没有人接触任何东西)的方法。
P.S.:Yarn 正在将您的包裹列表发送到 Facebook。
评论
npm-shrinkwrap.json
npm update
下面是一个基本的正则表达式,用于匹配语义版本号,以便您可以快速将它们全部替换为星号。
语义版本正则表达式
([>|<|=|~|^|\s])*?(\d+\.)?(\d+\.)?(\*|\d+)
如何使用
在 JSON 文件中选择要替换的包版本。
输入上面的正则表达式,并验证它是否与正确的文本匹配。
将所有匹配项替换为星号。
跑npm update --save
评论
('|")([>|<|=|~|^|\s])*?(\d+\.)?(\d+\.)?(\*|\d+)
:
ctrl+d
"*"
无需额外软件包的解决方案
将每个依赖项的版本更改为:*
"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
使用 Updtr!
基于 npm outdated,updtr 安装最新版本并为每个依赖项运行 npm test。如果测试成功,updtr 会将新版本号保存到package.json。但是,如果测试失败,updtr 将回滚其更改。
Greenkeeper(如果您使用的是 GitHub)。
这是一个 GitHub 集成,设置起来非常容易。安装后,它会自动在你指定的存储库中创建拉取请求(如果需要,也可以创建所有请求),并使你的代码始终保持最新状态,而不会强迫你手动执行任何操作。然后,PR 应该在 CI 服务上触发生成,并且根据检查成功或失败,您可以不断找出触发问题的原因,或者 CI 何时通过,只需合并 PR。
在底部,您可以看到第一次构建首先失败,在提交(“升级到节点 v6.9”)后,测试通过,因此我最终可以合并 PR。它也带有很多表情符号。
另一种选择是 https://dependencyci.com/,但我没有对其进行密集测试。乍一看,Greenkeeper 总体上看起来更好,IMO,并且具有更好的集成性。
- npm 已过时
- npm 更新
应该为您提供与您的应用程序兼容的最新所需版本。但不是最新版本。
如果您碰巧使用 Visual Studio Code 作为 IDE,这是一个有趣的小扩展,可以使更新过程一键完成。package.json
注意:更新package.json
文件中的软件包后,运行 npm update
以安装新版本。
版本镜头
评论
我用它来实现这一目标。npm-check
npm i -g npm npm-check
npm-check -ug # To update globals
npm-check -u # To update locals
另一个有用的命令列表,它将在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
评论
yarn upgrade-interactive --latest
现在是更好的选择
此功能已在 npm v5 中引入。使用 和 更新package.json更新 npm:npm install -g npm@latest
删除文件夹node_modules并package-lock.json(如果有)
跑。这会根据语义版本控制将 package.json 中的依赖项更新到最新版本。
npm update
要更新到最新版本,您可以使用 .npm-check-updates
如果您使用的是 ,yarn upgrade-interactive
是一个非常时尚的工具,可以让您查看过时的依赖项,然后选择要更新的依赖项。yarn
使用 Yarn 的更多理由。嘿。npm
评论
如果您使用的是 npm 5 和 Node.js 8,请尝试以下命令:
npm update --save
评论
update
package.json
"1.2.3"
1.2.4
我真的很喜欢npm-upgrade的工作原理。它是一个简单的命令行实用程序,可以遍历您的所有依赖项,并允许您查看与最新版本相比的当前版本,并根据需要进行更新。
下面是在项目根目录(文件旁边)中运行后发生的情况的屏幕截图:npm-upgrade
package.json
对于每个依赖项,您可以选择升级、忽略、查看更改日志或完成该过程。到目前为止,它对我来说效果很好。
需要明确的是,这是一个第三方软件包,需要先安装该命令才能正常工作。它不附带 npm 本身:
npm install -g npm-upgrade
然后,从具有 package.json 文件的项目的根目录:
npm-upgrade
评论
npm-upgrade
npm upgrade
npm-upgrade
npm upgrade
package.json
。upgrade
update
npx npm-upgrade
我必须用来更新的命令:package.json
NPM 3.10.10
npm install -g npm-check-updates
ncu -a
npm install
背景:
我使用的是 @josh3736 的最新命令,但我没有更新。然后我在运行时注意到描述文本:package.json
npm-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-updates
npm-check-updates -u
[INFO]: You can also use ncu as an alias
评论
-a
-u
若要查看哪些包有较新的版本可用,请使用以下命令:
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
-D, --save-dev:包将出现在 devDependencies 中。
评论
下面的代码(被接受)给我写了类似“它花了太长时间等等”之类的东西,什么也没做。可能使用全局标志是问题所在,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
评论
--packageFile package.json
如果使用 Yarn,则以下命令会将所有包更新到最新版本:
yarn upgrade --latest
从他们的文档中:
该命令升级的软件包与 upgrade 命令相同,但会忽略 package.json 中指定的版本范围。相反,将使用 latest 标记指定的版本(可能会跨主要版本升级包)。
upgrade --latest
评论
我通过使用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
如果你想通过一个漂亮的(用于终端的)交互式报告界面使用一种温和的方法,我建议使用 npm-check。
它不是一把锤子,而是让你对依赖项更新有更重要的了解和控制。
为了让你了解等待什么,这里有一个屏幕截图(从 git 页面抓取的 npm-check):
评论
从 npm 版本 5.2.0 开始,有一种方法可以在一行中运行它,而无需将任何其他包安装到全局 npm 注册表或本地应用程序。这可以通过利用与 npm 捆绑在一起的新实用程序来完成。(点击这里了解更多。npx
)
在项目的根目录中运行以下命令:
npx npm-check-updates -u && npm i
使用 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 模块?
我为最新版本的 NPM 找到了另一种解决方案。我想用显式的最新版本号替换所有“*”依赖项。所讨论的方法都不适合我。
我做了:
- 将所有“*”替换为“^0.0.0”
- 跑
npm-check-updates -u
现在package.json中的所有内容都已更新到最新版本。
到目前为止,最简单的方法是使用 pnpm 而不是 npm,然后简单地键入:
pnpm update --latest
如果你不想安装全局 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()))"
评论
如果你正在寻找一个不涉及安装 npm 包的更简单的解决方案,我会结帐 updatepackagejson.com
安全更新
用于发现过期的依赖项。
npm outdated
用于执行安全的依赖项升级。
npm update
用于升级到软件包的最新主要版本。
npm install <packagename>@latest
突发性更新
用。
npx npm-check-updates -u
npm install
将所有依赖项升级到其最新的主要版本。
评论
npm install @latest
npm install <PACKAGE>@latest
对我来说,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:dependencies
package.json
npm i
此外,与 npm-check-updates
不同,updates
的依赖项为零(在撰写本文时,ncu 有 29 个)。
评论
这可能会有所帮助:
npm outdated | awk '{ if (NR>1) {print $1"@"$4} }' | xargs npm i
扩展 kozlovd 的答案,我构建了一个 Bash 脚本,通过两个步骤更新任何 npm 脚本:
这为您提供了 npm 包的数量,如果您遇到错误,请手动计算它们。
npm list | wc -l
在这里,将 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”之后,以最终使用最新版本安装所有这些包。
这些步骤可以使用没有设置版本或现有项目的包更新新项目。
因为从最初的问题到现在已经快 10 年了,而且许多答案要么已经过时,要么不推荐。
我会使用与包管理器无关的东西,即可以与 npm、pnpm、Yarn 或其他一起使用。
最近我一直在使用 taze。
您可以将其添加到开发依赖项中并从那里运行,也可以使用 或 等不安装即可运行。npx taze
pnpx taze
无需为一次性用例安装另一个 Node.js 模块,只需在 shell 中执行此操作...
npm install $(npm outdated | tail -n +2 | awk '{print $1}' | sed -e 's/$/@latest/g' | tr '\n' ' ')
在 2023 年,我只是使用了:
npm update
此时会更新许多软件包,但您可能会收到一条消息,指出某些软件包需要修复。在那种情况下,我跑了:
npm audit fix --force
最后,为了确保它全部安装,我运行:
npm install
就是这样;我的包裹已更新。
无需手动编辑配置文件。
评论
npm update
不升级到最新版本。它只会升级到package.json中给出的版本范围。
npm update --save
将package.json依赖项升级到较新版本,前提是它们属于指定的版本范围。例如,可以升级到 但不能 .^1.0.0
^1.1.0
^2.0.0
package.json
package-lock.json
package.json
npm install
npm update
package-lock.json
package.json
package.json
我发现npm-check-updates运行良好,但它的依赖项非常重(目前有312个包)。
我创建了一个有限但非常轻量级(无依赖项)工具来更新依赖项:npm-updatedependencies2latest
也许这对其他人来说也是一个很好的解决方案。
有一个在线package.json更新工具。也可以通过下拉列表选择版本。
它还更新到主要版本,npm 过时和 ncu 不这样做。
将package.json内容粘贴到输入字段中,并让它解析:
输出如下所示:
评论
npm outdated | sed '1d; s/ .*/@latest/' | xargs npm i --save