95 lines
2.6 KiB
Bash
Executable File
95 lines
2.6 KiB
Bash
Executable File
#!/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.0yue.com/api/packages/shenxianhe/npm/
|
||
|
||
|
||
|
||
# 配置npm认证(如果提供了环境变量)
|
||
configure_npm_auth() {
|
||
# 如果设置了 SHENXIANHE_AUTH_TOKEN 变量,则配置npm
|
||
if [ -n "$SHENXIANHE_AUTH_TOKEN" ]; then
|
||
echo "检测到 SHENXIANHE_AUTH_TOKEN 环境变量,配置npm认证..."
|
||
npm config set -- '//git.0yue.com/api/packages/shenxianhe/npm/:_authToken' "$SHENXIANHE_AUTH_TOKEN"
|
||
fi
|
||
|
||
# 无论是否设置了环境变量,都继续执行(因为可能之前已经配置过npm)
|
||
echo "正在使用当前npm配置进行认证..."
|
||
}
|
||
|
||
# 显示认证错误提示信息
|
||
display_auth_error() {
|
||
echo "提示:如果是认证失败,请尝试设置环境变量:export SHENXIANHE_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.0yue.com/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.0yue.com/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.0yue.com/api/packages/shenxianhe/npm/
|
||
|
||
# 检查发布是否成功
|
||
if [ $? -eq 0 ]; then
|
||
echo "成功发布包 $PACKAGE_NAME@$VERSION 到 npm 仓库"
|
||
else
|
||
echo "错误:发布包失败"
|
||
display_auth_error
|
||
exit 1
|
||
fi |