我有一个节点应用程序,在节点10上进行测试。我使用纱线作为依赖管理器。由于我的应用程序测试是在CI上使用节点10的最新版本运行的,所以在运行任何纱线命令时,我希望确保所有开发人员都安装了最新的10.x.x版本。
例如,假设当前的最新节点版本为10.22.1,那么如果开发人员在10.22.0或10.11.1上,我希望停止纱线安装。
在发动机中使用package.json指令,我尝试了以下语法,但没有效果。
{
"engines": {
"node": "^10.x.x",
}
}{
"engines": {
"node": "^10",
}
}{
"engines": {
"node": ">10.0.0 <11.0.0",
}
}{
"engines": {
"node": "10",
}
}所有这些都允许具有主要版本10的任何节点。
发布于 2020-09-08 03:48:35
根据纱线文档(https://classic.yarnpkg.com/en/docs/package-json/),在安装包之前调用preinstall。
如果定义了预安装脚本,则在安装包之前由纱线调用预安装脚本。
所以我会在你的package.json里做这样的事情:
"scripts": {
....
"preinstall": "./scripts/preinstall.sh",
}您的preinstall.sh可能是:
#!/bin/bash
currentver="$(node -v)"
requiredver="v10.0.0"
if [ "$(printf '%s\n' "$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因此,如果您的开发人员的版本小于10.0.0,那么上面的脚本将失败,而yarn install命令也会失败。
注意:对于版本比较的shell脚本,请归功于https://unix.stackexchange.com/questions/285924/how-to-compare-a-programs-version-in-a-shell-script。
https://stackoverflow.com/questions/63739597
复制相似问题