是否可以使用 Yarn 包管理器升级我的
package.json
的依赖项部分中的所有特定范围的包?
例如:
yarn upgrade @scope/*
这将升级
yarn.lock
和 package.json
文件中的所有范围包。
在当前版本 v1.2.1 中,您实际上可以使用 build in
--scope
标志来仅升级以该范围 yarn upgrade --scope @angular
开头的软件包。在官方网站上查看更多关于yarn升级范围的内容。
由于目前无法使用 Yarn 执行此操作,因此我编写了一个非常短的 Node 脚本来执行您想要的操作:
var fs = require('fs');
var child_process = require('child_process');
var filterRegex = /@angular\/.*/;
fs.readFile('./package.json', function(err, data) {
if (err) throw err;
var dependencies = JSON.parse(data)['dependencies'];
Object.keys(dependencies).forEach(function(dependency) {
if (filterRegex.test(dependency)) {
console.log('Upgrading ' + dependency);
child_process.execSync('yarn upgrade ' + dependency);
} else {
console.log('Skipping ' + dependency);
}
});
});
这是其作用的快速解释:
它从终端当前所在的目录加载
package.json
然后我们解析
package.json
的 JSON 并获取 "dependencies"
键对于每个依赖项,我们运行指定为
filterRegex
的正则表达式(如果您需要更改此设置或想要解释正则表达式语法,我将使用 RegExr 进行测试。我使用 @angular
作为示例前缀正则表达式)如果依赖项匹配,我们运行
yarn upgrade [DEPENDENCY]
并记录它如果您对此有任何疑问,请告诉我,但这应该可以解决您的问题,直到 Yarn 团队提出更好的解决方案。
或者更好地安装yarn-update。 我发现它非常有用。 您所要做的就是运行
yarn-update
,然后选择您想要更新的软件包。
下面的代码将范围内的所有包升级到最新版本。
yarn upgrade --scope @scope-name --latest
或
yarn upgrade -S @scope-name --latest
yarn upgrade-interactive
应该可以使用最新版本的纱线为您解决问题。当安装@valentinvoilean上面提到的yarn-update包时,甚至会输出这个建议。
yarn upgrade --scope @scopeName --latest
//Example :-
yarn upgrade --scope @angular --latest
// OR
yarn upgrade -S @angular --latest
在 Yarn 的现代版本(Yarn 2 及更高版本)中,您可以使用
yarn up '@scope/*'
。您甚至不需要安装交互式升级插件。我花了比需要的时间更长的时间才找到这个!请参阅此处的文档:https://yarnpkg.com/cli/up请注意,yarn upgrade
已弃用,并且在较新版本中不存在。