hbsx 0.2.9

A easy-to-use file encryption tool with compression support
Documentation
# 首次发布 npm 包指南

## 问题说明

首次发布作用域包(@jihuayu/hbsx)时遇到的错误通常是因为:
1. npm token 配置问题
2. 作用域包需要 `--access public` 标志
3. 包名在 npm 上不存在需要首次创建

## 解决方案:手动首次发布

### 步骤 1: 登录 npm

```powershell
# 登录到 npm(如果还没登录)
npm login

# 验证登录状态
npm whoami
```

### 步骤 2: 运行首次发布脚本

```powershell
cd package/npm
node scripts/first-publish.js
```

这个脚本会:
- ✅ 检查 npm 登录状态
- ✅ 更新所有包的版本号到 0.1.0
- ✅ 依次发布 7 个包(1 主包 + 6 平台包)
- ✅ 使用 `--access public` 确保公开访问

### 步骤 3: 验证发布

```powershell
# 检查主包
npm view @jihuayu/hbsx

# 检查平台包
npm view @jihuayu/hbsx-win32-x64
```

## 注意事项

### 1. 首次发布时平台包可能没有二进制文件

这是正常的!首次发布只是在 npm 上创建包的占位符。之后通过 GitHub Actions 发布新版本时会包含二进制文件。

### 2. 关于作用域包

- 包名格式:`@jihuayu/package-name`
- 必须使用 `--access public` 才能公开访问
- 默认情况下,作用域包是私有的(需要付费)

### 3. 如果你想跳过手动发布

你也可以直接从 GitHub Actions 首次发布,但需要确保:

1. **创建 npm Automation Token**   - 访问:https://www.npmjs.com/settings/YOUR_USERNAME/tokens
   - 点击 "Generate New Token"
   - 选择 "Automation" 类型
   - 复制 token

2. **在 GitHub 中设置 Secret**   - 访问:https://github.com/jihuayu/xor/settings/secrets/actions
   - 点击 "New repository secret"
   - Name: `NPM_TOKEN`
   - Value: 粘贴你的 npm token

3. **推送 tag 触发发布**   ```powershell
   git tag v0.2.4
   git push origin v0.2.4
   ```

## 常见错误

### 错误 1: "Access token expired or revoked"

**解决**:重新生成 npm token,使用 "Automation" 类型

### 错误 2: "404 Not found"

**解决**:包名不存在,需要首次发布

### 错误 3: "EPUBLISHCONFLICT"

**解决**:包名已存在,请使用不同的版本号

### 错误 4: "You must sign up for private packages"

**解决**:添加 `--access public` 标志

## 发布后的验证

```powershell
# 安装测试
npm install -g @jihuayu/hbsx

# 查看版本
npm view @jihuayu/hbsx versions

# 查看详细信息
npm view @jihuayu/hbsx
```

## 手动发布单个包(如果需要)

```powershell
# 发布平台包
cd package/npm/platform-packages/win32-x64
npm publish --access public

# 发布主包
cd package/npm
npm publish --access public
```

## 后续发布

首次手动发布成功后,之后就可以完全使用 GitHub Actions 自动发布:

```powershell
# 创建新版本 tag
git tag v0.2.5
git push origin v0.2.5

# GitHub Actions 会自动:
# 1. 编译所有平台的二进制文件
# 2. 更新版本号
# 3. 发布到 npm
# 4. 发布到 crates.io
```