Yarn安装-如何强制节点(10.x.x)的最新次要版本和补丁



我有一个在节点10上测试的Node应用程序。我使用yarn作为依赖关系管理器。由于我的应用程序测试是在节点10的最新版本的CI上运行的,所以我想确保所有开发人员在运行任何yarn命令时都安装了最新的10.x.x版本。

例如,假设当前最新的节点版本是10.22.1,那么如果开发人员是10.22.0或10.11.1,我想停止yarn安装。

使用package.json中的engine指令,我尝试了以下语法,但没有成功。

{
"engines": {
"node": "^10.x.x",
}
}
{
"engines": {
"node": "^10",
}
}
{
"engines": {
"node": ">10.0.0 <11.0.0",
}
}
{
"engines": {
"node": "10",
}
}

所有这些都允许使用主版本10的任何节点。

根据纱线文档(https://classic.yarnpkg.com/en/docs/package-json/),在安装程序包之前调用preinstall

如果已定义,则在安装包之前,yarn会调用预安装脚本。

所以我会在你的包中使用这样的东西.json:

"scripts": {
....
"preinstall": "./scripts/preinstall.sh",

}

您的preinstall.sh可能是:

#!/bin/bash
currentver="$(node -v)"
requiredver="v10.0.0"
if [ "$(printf '%sn' "$requiredver" "$currentver" | sort -V | head -n1)" = "$requiredver" ]; then 
echo "Version is good so let's go with install"
else
echo "Please install the node version greater than v10.0.0"
exit -1
fi

因此,如果您的开发人员的版本低于v10.0.0,则上述脚本将失败,进而使yarn install命令失败。

注:贷记至https://unix.stackexchange.com/questions/285924/how-to-compare-a-programs-version-in-a-shell-script用于版本比较的shell脚本。

正如我们在npm文档中所做的:

要指定1.0.4以下的可接受版本范围,请使用以下语法:

  • 补丁版本:1.0或1.0.x或~1.0.4
  • 次要版本:1或1.x或^1.0.4
  • 主要版本:*或x

所以,如果你只想要求10.22.1版本或更新版本,你应该使用~10.22.1或^10.22.1

这是另一个选择,通过使用准确的版本来固定版本(你可以从这个链接中阅读更多关于它的信息(,比如:

{
"engines": {
"node": "10.22.1",
}
}

相关内容

最新更新