# 发布脚本使用指南

这个发布脚本可以帮助您自动化版本更新和 npm 包发布流程。

## 功能特性

- ✅ 自动更新版本号（patch/minor/major/prerelease）
- ✅ 自动构建项目
- ✅ 发布到 npm
- ✅ 创建 Git 标签
- ✅ 支持模拟运行
- ✅ 错误回滚机制
- ✅ 彩色输出日志

## 快速开始

### 1. 基本发布（patch 版本）

```bash
npm run release
```

### 2. 指定版本类型发布

```bash
# 发布patch版本 (1.0.0 -> 1.0.1)
npm run publish:patch

# 发布minor版本 (1.0.0 -> 1.1.0)
npm run publish:minor

# 发布major版本 (1.0.0 -> 2.0.0)
npm run publish:major

# 发布预发布版本 (1.0.0 -> 1.0.1-0)
npm run publish:prerelease
```

### 3. 模拟运行（不实际发布）

```bash
npm run publish:dry
```

## 高级用法

### 直接使用脚本

```bash
# 基本用法
node scripts/publish.js [版本类型] [选项]

# 发布patch版本并推送到远程仓库
node scripts/publish.js patch --push

# 发布预发布版本到beta标签
node scripts/publish.js prerelease --tag beta

# 模拟运行
node scripts/publish.js --dry-run

# 查看帮助
node scripts/publish.js --help
```

### 版本类型说明

| 类型         | 说明             | 示例            |
| ------------ | ---------------- | --------------- |
| `patch`      | 补丁版本（默认） | 1.0.0 → 1.0.1   |
| `minor`      | 次要版本         | 1.0.0 → 1.1.0   |
| `major`      | 主要版本         | 1.0.0 → 2.0.0   |
| `prerelease` | 预发布版本       | 1.0.0 → 1.0.1-0 |

### 可用选项

| 选项          | 说明                    | 示例         |
| ------------- | ----------------------- | ------------ |
| `--tag <tag>` | 指定 npm 发布标签       | `--tag beta` |
| `--push`      | 推送 Git 标签到远程仓库 | `--push`     |
| `--dry-run`   | 模拟运行，不实际发布    | `--dry-run`  |
| `--help`      | 显示帮助信息            | `--help`     |

## 发布流程

脚本会按以下顺序执行：

1. **更新版本号** - 使用 `npm version`命令更新 package.json 中的版本
2. **构建项目** - 执行 `npm run build`命令
3. **发布到 npm** - 执行 `npm publish`命令
4. **创建 Git 标签** - 创建版本标签并可选推送到远程仓库

## 错误处理

- 如果发布过程中出现错误，脚本会自动回滚版本号
- 如果 Git 操作失败，会提示手动执行相关命令
- 所有错误都会有详细的日志输出

## 前置条件

1. **npm 登录** - 确保已经登录 npm：`npm login`
2. **Git 仓库** - 项目需要是一个 Git 仓库
3. **构建脚本** - 确保 `npm run build`命令可以正常执行

## 注意事项

- 发布前请确保代码已经提交到 Git 仓库
- 建议先使用 `--dry-run`选项测试发布流程
- 预发布版本会使用 `beta`标签，不会影响 `latest`标签
- 使用 `--push`选项会自动推送到远程仓库

## 示例工作流

```bash
# 1. 开发完成后，先模拟运行检查
npm run publish:dry

# 2. 发布patch版本
npm run publish:patch

# 3. 或者发布并推送到远程仓库
npm run release
```
