91 lines
2.2 KiB
Bash
91 lines
2.2 KiB
Bash
#!/bin/bash
|
|
|
|
# 发布所有子包到私有 npm 仓库
|
|
# 使用方法: bash scripts/publish.sh
|
|
# 注意: 发布仓库地址使用各子包 package.json 中的 publishConfig.registry 配置
|
|
# 版本管理请先通过 pnpm release (standard-version) 完成,本脚本仅负责构建和发布
|
|
|
|
set -e
|
|
|
|
echo "🚀 开始发布流程"
|
|
echo ""
|
|
|
|
# 子包列表
|
|
PACKAGES=(
|
|
"packages/common"
|
|
"packages/vue3"
|
|
"packages/uni-app"
|
|
"packages/vue2"
|
|
)
|
|
|
|
# 1. 检查工作区是否干净
|
|
echo "🔍 检查 Git 工作区状态..."
|
|
if [[ -n $(git status -s) ]]; then
|
|
echo "⚠️ 工作区有未提交的更改,请先提交或暂存"
|
|
git status -s
|
|
read -p "是否继续? (y/N) " -n 1 -r
|
|
echo
|
|
if [[ ! $REPLY =~ ^[Yy]$ ]]; then
|
|
exit 1
|
|
fi
|
|
fi
|
|
echo ""
|
|
|
|
# 2. 运行测试
|
|
echo "🧪 运行测试..."
|
|
if ! pnpm test; then
|
|
echo "❌ 测试失败,停止发布"
|
|
exit 1
|
|
fi
|
|
echo ""
|
|
|
|
# 3. 构建所有包
|
|
echo "📦 构建所有包..."
|
|
if ! pnpm build; then
|
|
echo "❌ 构建失败,停止发布"
|
|
exit 1
|
|
fi
|
|
echo ""
|
|
|
|
# 获取当前版本号
|
|
CURRENT_VERSION=$(node -p "require('./package.json').version")
|
|
echo " 当前版本: v$CURRENT_VERSION"
|
|
echo ""
|
|
|
|
# 4. 发布每个包
|
|
echo "📤 开始发布包到 npm..."
|
|
for package in "${PACKAGES[@]}"; do
|
|
if [ -d "$package" ]; then
|
|
PACKAGE_NAME=$(node -p "require('./$package/package.json').name")
|
|
PACKAGE_VERSION=$(node -p "require('./$package/package.json').version")
|
|
echo "📤 发布 $PACKAGE_NAME@$PACKAGE_VERSION ..."
|
|
cd "$package"
|
|
if ! pnpm publish --no-git-checks; then
|
|
echo "❌ $package 发布失败,停止后续发布"
|
|
exit 1
|
|
fi
|
|
cd - > /dev/null
|
|
echo "✅ $PACKAGE_NAME@$PACKAGE_VERSION 发布成功"
|
|
echo ""
|
|
else
|
|
echo "⚠️ 跳过不存在的包: $package"
|
|
fi
|
|
done
|
|
|
|
# 5. 推送到远程仓库
|
|
echo "🔼 推送到远程仓库..."
|
|
read -p "是否推送到远程仓库? (y/N) " -n 1 -r
|
|
echo
|
|
if [[ $REPLY =~ ^[Yy]$ ]]; then
|
|
git push origin master
|
|
git push origin --tags
|
|
echo "✅ 已推送到远程仓库"
|
|
else
|
|
echo "⚠️ 跳过推送,请手动执行:"
|
|
echo " git push origin master"
|
|
echo " git push origin --tags"
|
|
fi
|
|
echo ""
|
|
|
|
echo "🎉 所有包发布完成!版本: v$CURRENT_VERSION"
|