@core 基础设施
@skyroc/scripts
项目自动化 CLI(changelog / release / git-commit / cleanup / create-admin)
概览
| 项 | 值 |
|---|---|
| 包名 | @skyroc/scripts |
| 版本 | 2.5.0 |
| 命令 | sa(bin) |
| 依赖 | cac、c12、bumpp、enquirer、execa、kolorist、@soybeanjs/changelog、@tanstack/router-generator、npm-check-updates、picomatch |
@skyroc/scripts 是项目的自动化命令行工具。安装后可用 sa <command> 调用,也可在根 package.json 的 scripts 里间接调用(如 pnpm create:admin)。
完整命令列表
| 命令 | 作用 |
|---|---|
sa changelog | 基于 @soybeanjs/changelog 生成 / 更新 CHANGELOG |
sa release | 一站式发版:bumpp 升版本 → changelog → commit → tag → push |
sa cleanup | 按 glob 清理 dist、node_modules 等产物 |
sa git-commit | 交互式生成 Conventional Commits 信息 |
sa git-commit-verify | 校验 git commit message(用于 git hook) |
sa update-pkg | 调 npm-check-updates 批量升级依赖 |
sa create-admin <name> | 从内置 templates/admin 生成新 admin 应用 |
sa sync-admin-template [--check] | 把 apps/admin 同步到内置模板(--check 只校验差异) |
在仓库里的使用
根 package.json:
{
"scripts": {
"create:admin": "sa create-admin",
"sync:admin-template": "sa sync-admin-template",
"check:admin-template": "sa sync-admin-template --check"
}
}apps/admin package.json:
{
"scripts": {
"cleanup": "sa cleanup",
"commit": "sa git-commit",
"commit:zh": "sa git-commit -l=zh-cn",
"release": "sa release",
"update-pkg": "sa update-pkg"
}
}配置文件:soybean.config.ts
CLI 通过 c12 加载配置(搜索 soybean.config.{ts,js,mjs,json}):
// soybean.config.ts
export default {
/** cleanup 命令清理的 glob */
cleanupDirs: ['**/dist', '**/node_modules', '!node_modules/**'],
/** npm-check-updates 透传参数 */
ncuCommandArgs: ['--deep', '-u'],
/** changelog 选项 */
changelogOptions: {},
/** git-commit-verify 跳过的正则 */
gitCommitVerifyIgnores: [/^WIP:/, /^Merge /]
};注意:
@skyroc/scriptsREADME 写的是defineConfig(...),但当前源码中并未导出该函数;实际工作机制是 c12 直接读 default export。
模块结构
packages/@core/scripts/
├── bin.ts # shebang 入口
├── templates/admin/ # create-admin 使用的模板快照
└── src/
├── index.ts # setupCli(cac 注册命令)
├── commands/ # 各命令实现
├── config/ # c12 加载 CliOption
├── locales/ # 中英文交互文案
├── shared/ # execCommand(execa)
└── types/ # CliOption 接口命令实现要点
| 命令 | 关键依赖与行为 |
|---|---|
changelog | 包装 @soybeanjs/changelog,按 git 提交记录生成 |
release | bumpp 交互选择 patch/minor/major → 生成 changelog → 提交 → 打 tag → 可选推送 |
git-commit | enquirer 引导选择 type / scope / subject,输出 type(scope): subject;支持 -l=zh-cn 中文 |
git-commit-verify | simple-git-hooks 调用,匹配 gitCommitVerifyIgnores 跳过的,再用正则校验 |
cleanup | picomatch + execa 删除匹配的目录(含跨平台 rm) |
create-admin | 从 templates/admin 拷贝到目标路径,可选 --install / --git-init |
sync-admin-template | 反向:把 apps/admin 同步到 templates/admin;--check 只 diff |
update-pkg | 透传 ncu 参数 |
locale 文案
src/locales/{en-us,zh-cn}.ts 提供 prompt 与提示信息,sa git-commit -l=zh-cn 切到中文。
与 monorepo 工程化的关系
- commit 规范 ←→ Git 提交规范
- release 流程 ←→ 构建与部署
- 模板同步 ←→ Admin 应用作为可复制的 starter,参见 Admin 应用总览
不公开的内部 API
src/commands/index.ts 还导出了 genChangelog、cleanup、createAdminTemplate、gitCommit 等命令函数,理论上可深路径 import 复用,但 package.json 的 exports 字段未公开它们,按内部 API 对待。