我有一个在节点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",
}
}