# js-sdk 开发与发布流程

本文只描述 `js-sdk` 仓库自身的开发与发布流程，不适用于开放平台前端 Bits 敏捷车。

## 包与分支

- 仓库：`dc/js-sdk`
- npm 包：`@lark-project/js-sdk`
- 正式 registry：`https://registry.npmjs.org/`
- 当前 `publishConfig.registry` 指向 npmjs
- 构建工具：Modern.js Module Tools
- 变更记录：`CHANGELOG.md`

## 本地开发

```bash
yarn
yarn build
```

`yarn build` 生成：

- `dist/types/index.d.ts`
- `dist/lib/index.js`
- `dist/es/index.js`

发布前需要确认公开类型已经体现在 `dist/types/index.d.ts` 中。

## 版本与变更记录

本仓当前是单包发布流程。发布前需要同步更新：

- `package.json` 的 `version`
- `CHANGELOG.md`

版本选择原则：

- 兼容新增类型或能力：递增 patch 或 minor；按本仓现有节奏优先 patch。
- 修复类型定义且不破坏 API：递增 patch。
- 破坏性类型调整：需要单独评审并写清迁移说明。

## 发布流程

```bash
yarn build
npm publish --registry=https://registry.npmjs.org/
npm view @lark-project/js-sdk@<version> version --registry=https://registry.npmjs.org/
git tag v<version>
git push origin v<version>
git add package.json CHANGELOG.md DEVELOPMENT_RELEASE.md
git commit -m "chore: release js-sdk <version>"
git push origin <branch>
```

`npm publish` 会触发：

- `prepublishOnly`: `modern build --platform`
- `prepare`: `modern build && husky install`

如果当前账号没有 npmjs 发布权限，需要先找 `@lark-project/js-sdk` 包 maintainer 添加权限；不要把未发布成功的版本打 release tag。

## 内网联调包

如确实需要先在内网联调，可以在确认权限和风险后发布到 BNPM：

```bash
npm publish --registry=https://bnpm.byted.org/
npm view @lark-project/js-sdk@<version> version --registry=https://bnpm.byted.org/
```

BNPM 发布不等价于 npmjs 正式发布，发布记录中必须明确 registry。

## 发布前检查清单

- `package.json` 版本未在目标 registry 中存在。
- `CHANGELOG.md` 已补充本次变更。
- `yarn build` 通过，并生成最新 `dist/` 产物。
- `npm publish --dry-run --registry=<target-registry>` 包内容符合预期。
- 目标 registry 中能查询到发布后的版本。

