如何在Vercel ignore build step脚本中同时判断分支和文件路径
Vercel 构建过滤脚本整合方案
完全可以在同一个脚本中整合「仅main分支部署」+「仅指定目录变更才部署」两个要求,具体实现如下:
实现逻辑说明
- 保留原有的分支判断逻辑,非main分支直接跳过构建
- 通过
git diff命令获取当前提交与上一次提交的所有变更文件路径,Vercel构建环境默认保留完整的git提交记录,可直接执行该命令 - 遍历所有变更文件,判断是否属于你指定的目录范围,只要有一个匹配的变更文件就触发构建
修改后完整脚本
# 在这里定义你需要监听的指定目录/文件,多个值用空格分隔,目录注意末尾带/ TARGET_DIRS=("src/" "public/" "package.json") # 第一步:先判断分支是否为main if [[ "$VERCEL_GIT_COMMIT_REF" != "main" ]] ; then echo "🛑 - 非main分支,取消构建" exit 0; fi # 第二步:获取当前提交与上一次提交的所有变更文件 CHANGED_FILES=$(git diff --name-only HEAD~1 HEAD) # 第三步:检查变更文件是否属于目标目录 for FILE in $CHANGED_FILES; do for DIR in "${TARGET_DIRS[@]}"; do if [[ $FILE == "$DIR"* ]]; then echo "✅ - 检测到目标目录 $DIR 有变更,开始构建" exit 1; fi done done # 所有变更都不在目标目录,取消构建 echo "🛑 - 无目标目录变更,取消构建" exit 0;
注意事项
- 你可以自行修改
TARGET_DIRS数组的内容,替换为你需要监听的目录或文件路径,支持单个文件的监听 - 脚本逻辑遵循Vercel Ignore Build Step的规则:
exit 0代表跳过构建,exit 1代表执行构建 - 如果需要排除某个子目录,可以在匹配判断中添加额外的排除逻辑即可
内容的提问来源于stack exchange,提问作者Uri Klar
相关产品推荐
相关产品推荐

