如何使用npm批量更新同一父包下的所有子包(以@mantine为例)
如何一次性更新所有@mantine系列npm包
假设我的package.json包含以下依赖:
"@mantine/core": "^5.1.5", "@mantine/dates": "^5.1.5", "@mantine/form": "^5.1.5", "axios": "^0.27.2", "react": "^18.1.0"
我想一次性更新所有@mantine相关的包,不想逐个写npm i @mantine/core@latest @mantine/dates@latest...,类似npm i @mantine/*@latest的命令可行吗?
直接使用@mantine/*@latest不可行
npm本身不支持这种通配符格式的包名进行安装或更新,执行该命令会触发报错,因为npm无法解析通配符对应的具体包资源。
可行的批量更新方案
方法1:借助npm-check-updates工具(推荐)
这是最便捷的批量更新方式,先全局安装该工具:
npm install -g npm-check-updates
接着指定@mantine/*范围的包更新到最新版本:
ncu -u "@mantine/*"
执行后工具会自动修改package.json中所有@mantine依赖的版本号为最新,最后执行常规安装命令即可完成更新:
npm install
方法2:通过Shell命令批量生成更新列表
如果不想额外安装工具,可以用Shell命令提取当前已安装的@mantine包名,再批量执行更新:
npm i $(npm ls --depth=0 | grep @mantine | awk -F'[ @]' '{print $2"@latest"}')
这条命令的逻辑是:
npm ls --depth=0:列出项目顶层依赖grep @mantine:筛选出所有@mantine开头的包awk:提取包名并拼接@latest后缀- 最后通过
npm i安装这些包的最新版本
方法3:手动指定包名(备选)
如果项目中@mantine系列包数量较少,也可以直接列出所有目标包进行更新,虽然繁琐但直观:
npm install @mantine/core@latest @mantine/dates@latest @mantine/form@latest
内容的提问来源于stack exchange,提问作者Shahriar
相关产品推荐
相关产品推荐

