Files
proto/script/publish-npm.sh
2025-08-30 00:30:47 +08:00

95 lines
2.6 KiB
Bash
Executable File
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/bin/bash
# npm发布脚本
# 参数1: 包名
# 参数2: 版本号
# 参数3: 工作目录
# 确保提供了必要的参数
if [ $# -lt 3 ]; then
echo "错误:缺少必要参数"
echo "用法:$0 <包名> <版本号> <工作目录>"
exit 1
fi
PACKAGE_NAME="$1"
VERSION="$2"
WORK_DIR="$3"
# 检查工作目录是否存在
if [ ! -d "$WORK_DIR" ]; then
echo "错误:工作目录 $WORK_DIR 不存在"
exit 1
fi
# 切换到工作目录
cd "$WORK_DIR"
# 设置npm注册表
echo "设置npm注册表..."
npm config set @shenxianhe:registry=https://git.shenxianhe.cn/api/packages/shenxianhe/npm/
# 配置npm认证如果提供了环境变量
configure_npm_auth() {
# 如果设置了 CONNECT_AUTH_TOKEN 变量则配置npm
if [ -n "$CONNECT_AUTH_TOKEN" ]; then
echo "检测到 CONNECT_AUTH_TOKEN 环境变量配置npm认证..."
npm config set -- '//git.shenxianhe.cn/api/packages/shenxianhe/npm/:_authToken' "$CONNECT_AUTH_TOKEN"
fi
# 无论是否设置了环境变量都继续执行因为可能之前已经配置过npm
echo "正在使用当前npm配置进行认证..."
}
# 显示认证错误提示信息
display_auth_error() {
echo "提示如果是认证失败请尝试设置环境变量export CONNECT_AUTH_TOKEN=your_access_token"
}
# 调用函数配置npm认证如果有环境变量
configure_npm_auth
# 检查包是否已存在
check_package_exists() {
echo "检查包 $PACKAGE_NAME@$VERSION 是否已存在..."
# 使用npm view命令检查包是否存在
if npm view "$PACKAGE_NAME@$VERSION" --registry=https://git.shenxianhe.cn/api/packages/shenxianhe/npm/ > /dev/null 2>&1; then
return 0 # 包已存在
else
return 1 # 包不存在
fi
}
# 如果包已存在,询问是否删除
if check_package_exists; then
echo "警告:包 $PACKAGE_NAME@$VERSION 已存在"
echo "是否要先删除现有包?(y/n)"
read -r answer
if [ "$answer" = "y" ] || [ "$answer" = "Y" ]; then
echo "删除现有包 $PACKAGE_NAME@$VERSION..."
npm unpublish --force "$PACKAGE_NAME@$VERSION" --registry=https://git.shenxianhe.cn/api/packages/shenxianhe/npm/
if [ $? -ne 0 ]; then
echo "错误:删除包失败"
display_auth_error
exit 1
fi
else
echo "取消发布操作"
exit 1
fi
fi
# 发布包
echo "发布包 $PACKAGE_NAME@$VERSION..."
npm publish --registry=https://git.shenxianhe.cn/api/packages/shenxianhe/npm/
# 检查发布是否成功
if [ $? -eq 0 ]; then
echo "成功发布包 $PACKAGE_NAME@$VERSION 到 npm 仓库"
else
echo "错误:发布包失败"
display_auth_error
exit 1
fi