背景
前端项目上线验证,一般都是看功能,没有版本号一说(有的话也是git打标),有些项目部署好几套,中间还不停迭代,久而久之可能就记不清楚项目版本了。因此,前端的版本号管理/记录是有存在必要的,如何使用那就各自发挥了。
方案
- 更改 package.json 中的版本号
- 版本号写入 public/version 文件
- git 打标、推送
每次打包前运行脚本,标记版本后打包发布。
脚本
bash
#!/bin/bash
# 定义版本号文件路径 package.json,可按需修改
VERSION_FILE="package.json"
# 检查版本号文件是否存在
if [ ! -f "$VERSION_FILE" ]; then
echo "错误:版本号文件 $VERSION_FILE 不存在。"
exit 1
fi
# 提取当前版本号
CURRENT_VERSION=$(grep -oE '"version": "[^"]+"' "$VERSION_FILE" | cut -d'"' -f4)
# 检查是否成功提取版本号
if [ -z "$CURRENT_VERSION" ]; then
echo "错误:无法从 $VERSION_FILE 中提取版本号,请检查文件格式。"
exit 1
fi
# 打印提取的版本号用于调试
echo "提取的当前版本号: $CURRENT_VERSION"
# 将版本号按 . 分割成数组
IFS='.' read -r -a VERSION_PARTS <<< "$CURRENT_VERSION"
MAJOR=${VERSION_PARTS[0]}
MINOR=${VERSION_PARTS[1]}
PATCH=${VERSION_PARTS[2]}
# 检查版本号是否符合 X.Y.Z 格式
if [ -z "$MAJOR" ] || [ -z "$MINOR" ] || [ -z "$PATCH" ]; then
echo "错误:版本号 $CURRENT_VERSION 格式不正确,应符合 X.Y.Z 格式。"
exit 1
fi
# 提示用户选择更新类型
echo "请选择要更新的版本类型:"
echo "1. 大版本 (MAJOR)"
echo "2. 小版本 (MINOR)"
echo "3. 补丁版本 (PATCH)"
read -p "输入对应的数字 (1/2/3): " UPDATE_CHOICE
case $UPDATE_CHOICE in
1)
NEW_MAJOR=$((MAJOR + 1))
NEW_MINOR=0
NEW_PATCH=0
NEW_VERSION="${NEW_MAJOR}.${NEW_MINOR}.${NEW_PATCH}"
;;
2)
NEW_MINOR=$((MINOR + 1))
NEW_PATCH=0
NEW_VERSION="${MAJOR}.${NEW_MINOR}.${NEW_PATCH}"
;;
3)
NEW_PATCH=$((PATCH + 1))
NEW_VERSION="${MAJOR}.${MINOR}.${NEW_PATCH}"
;;
*)
echo "错误:无效的选择,请输入 1、2 或 3。"
exit 1
;;
esac
# 更新版本号文件
if [[ "$(uname)" == "Darwin" ]]; then
# macOS 系统
sed -i '' "s/\"version\": \"$CURRENT_VERSION\"/\"version\": \"$NEW_VERSION\"/" "$VERSION_FILE"
else
# Linux 系统
sed -i "s/\"version\": \"$CURRENT_VERSION\"/\"version\": \"$NEW_VERSION\"/" "$VERSION_FILE"
fi
# 检查更新是否成功
UPDATED_VERSION=$(grep -oE '"version": "[^"]+"' "$VERSION_FILE" | cut -d'"' -f4)
if [ "$UPDATED_VERSION" != "$NEW_VERSION" ]; then
echo "错误:版本号更新失败。"
exit 1
fi
# 更新 version 文件
echo $NEW_VERSION > public/version
echo "版本号已从 $CURRENT_VERSION 更新到 $NEW_VERSION"
# 提交版本号更改
git add "$VERSION_FILE"
if ! git commit -m "Update version to $NEW_VERSION"; then
echo "错误:Git 提交失败,请检查 Git 状态。"
exit 1
fi
# 打标签
if ! git tag -a "$NEW_VERSION" -m "Release $NEW_VERSION"; then
echo "错误:Git 打标签失败。"
exit 1
fi
# 推送提交和标签
if ! git push origin main; then
echo "错误:推送提交到远程仓库失败。"
exit 1
fi
if ! git push origin "$NEW_VERSION"; then
echo "错误:推送标签到远程仓库失败。"
exit 1
fi
echo "版本更新、打标和推送完成"