@icebreakers/monorepo-templates 1.0.2 → 1.0.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/assets/.github/workflows/release.yml +42 -2
- package/assets/commitlint.config.ts +1 -3
- package/assets/eslint.config.js +2 -14
- package/assets/lint-staged.config.js +1 -3
- package/assets/package.json +8 -6
- package/assets/stylelint.config.js +1 -3
- package/assets/tsconfig.json +2 -1
- package/assets/vitest.config.ts +1 -3
- package/assets-data.mjs +0 -1
- package/dist/cli.d.mts +1 -0
- package/dist/cli.mjs +12 -0
- package/dist/index.mjs +1 -260
- package/dist/prepare-CtCifHGT.mjs +306 -0
- package/package.json +2 -2
- package/templates/client/package.json +1 -1
- package/templates/vitepress/.vitepress/config.ts +142 -69
- package/templates/vitepress/en/index.md +57 -0
- package/templates/vitepress/en/knowledge/monorepo.md +37 -0
- package/templates/vitepress/en/repoctl/adopt-existing.md +131 -0
- package/templates/vitepress/en/repoctl/aliases.md +71 -0
- package/templates/vitepress/en/repoctl/commands.md +120 -0
- package/templates/vitepress/en/repoctl/config.md +69 -0
- package/templates/vitepress/en/repoctl/getting-started.md +116 -0
- package/templates/vitepress/en/repoctl/index.md +74 -0
- package/templates/vitepress/en/repoctl/scenarios.md +117 -0
- package/templates/vitepress/en/repoctl/templates.md +128 -0
- package/templates/vitepress/en/repoctl/troubleshooting.md +96 -0
- package/templates/vitepress/en/repoctl/workflows.md +89 -0
- package/templates/vitepress/getting-started.md +21 -224
- package/templates/vitepress/index.md +41 -176
- package/templates/vitepress/monorepo/commands.md +13 -283
- package/templates/vitepress/monorepo/manage.md +16 -3
- package/templates/vitepress/monorepo/publish.md +52 -6
- package/templates/vitepress/monorepo/templates.md +14 -60
- package/templates/vitepress/monorepo/troubleshooting.md +14 -220
- package/templates/vitepress/repoctl/adopt-existing.md +135 -0
- package/templates/vitepress/repoctl/aliases.md +71 -0
- package/templates/vitepress/repoctl/commands.md +154 -0
- package/templates/vitepress/repoctl/config.md +81 -0
- package/templates/vitepress/repoctl/getting-started.md +122 -0
- package/templates/vitepress/repoctl/index.md +74 -0
- package/templates/vitepress/repoctl/scenarios.md +119 -0
- package/templates/vitepress/repoctl/templates.md +156 -0
- package/templates/vitepress/repoctl/troubleshooting.md +98 -0
- package/templates/vitepress/repoctl/workflows.md +105 -0
- package/templates/vitepress/tools/changeset.md +11 -0
- package/templates/vitepress/tools/husky.md +17 -0
- package/templates/vitepress/tools/lint-staged.md +10 -0
- package/templates/vitepress/tools/pnpm.md +26 -0
- package/templates/vitepress/tools/turborepo.md +17 -0
|
@@ -1,192 +1,57 @@
|
|
|
1
1
|
---
|
|
2
|
-
layout:
|
|
2
|
+
layout: home
|
|
3
|
+
|
|
4
|
+
hero:
|
|
5
|
+
name: repoctl
|
|
6
|
+
text: 让 pnpm monorepo 的日常操作更短、更稳
|
|
7
|
+
tagline: 用一套 CLI 管理初始化、诊断、创建模板、提交前校验和模板资产同步。
|
|
8
|
+
image:
|
|
9
|
+
src: /logo.jpg
|
|
10
|
+
alt: repoctl logo
|
|
11
|
+
actions:
|
|
12
|
+
- theme: brand
|
|
13
|
+
text: 快速开始
|
|
14
|
+
link: /repoctl/getting-started
|
|
15
|
+
- theme: alt
|
|
16
|
+
text: 命令速查
|
|
17
|
+
link: /repoctl/commands
|
|
18
|
+
|
|
19
|
+
features:
|
|
20
|
+
- title: 从已有仓库开始
|
|
21
|
+
details: 安装 repoctl 后运行 setup 和 doctor,先把 workspace、根脚本、配置冲突和提交链路检查清楚。
|
|
22
|
+
- title: 用模板创建包和应用
|
|
23
|
+
details: repo new 支持交互式创建、指定模板、dry-run、JSON 输出和创建计划落盘。
|
|
24
|
+
- title: 把质量门禁变成日常命令
|
|
25
|
+
details: repo check 统一预览和执行 lint、typecheck、build、test、tsd 等推荐校验。
|
|
3
26
|
---
|
|
4
27
|
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
这套模板的目标很直接:用一套尽量短、尽量稳定的命令,把 `pnpm + Turborepo + TypeScript + 工程化校验 + changesets` 串成一个真正能落地的 monorepo 起步架子。
|
|
8
|
-
|
|
9
|
-
如果你只想知道最简单怎么用,先记住下面这 5 步。
|
|
10
|
-
|
|
11
|
-
## 先这样用
|
|
28
|
+
## 最短路径
|
|
12
29
|
|
|
13
30
|
```bash
|
|
14
|
-
pnpm
|
|
15
|
-
pnpm setup
|
|
16
|
-
pnpm doctor
|
|
17
|
-
pnpm new
|
|
18
|
-
pnpm check
|
|
31
|
+
pnpm add -D repoctl
|
|
32
|
+
pnpm exec repo setup
|
|
33
|
+
pnpm exec repo doctor
|
|
34
|
+
pnpm exec repo new
|
|
35
|
+
pnpm exec repo check
|
|
19
36
|
```
|
|
20
37
|
|
|
21
|
-
|
|
22
|
-
- `pnpm setup`:同步当前仓库推荐的基础元信息和工具链配置。
|
|
23
|
-
- `pnpm doctor`:检查你是不是站在正确的仓库根目录、Node 版本对不对、根脚本齐不齐、配置文件有没有冲突、提交链路是否完整。
|
|
24
|
-
- `pnpm new`:创建一个新的 package 或 app。
|
|
25
|
-
- `pnpm check`:执行推荐的本地校验,适合提交前快速确认。
|
|
26
|
-
|
|
27
|
-
> 模板生成后的仓库优先推荐使用这些根脚本;底层实际对应的还是 `repo` CLI。`repoctl` 和 `@icebreakers/monorepo` 继续兼容,但不再是主文档入口。
|
|
28
|
-
|
|
29
|
-
## 最小心智模型
|
|
30
|
-
|
|
31
|
-
这个模板故意只保留三层命令入口:
|
|
32
|
-
|
|
33
|
-
| 层级 | 推荐写法 | 适合什么场景 |
|
|
34
|
-
| -------- | -------------------------------------------------------- | ---------------------------------------- |
|
|
35
|
-
| 根脚本 | `pnpm setup` / `pnpm new` / `pnpm doctor` / `pnpm check` | 新人日常使用,最短、最不容易记错 |
|
|
36
|
-
| 主 CLI | `pnpm exec repo ...` | 需要明确调用 CLI,或仓库还没同步根脚本时 |
|
|
37
|
-
| 分组命令 | `repo ws up` / `repo tg init` / `repo skills sync` | 已经熟悉命令体系,想走更细粒度入口 |
|
|
38
|
-
|
|
39
|
-
简单理解:
|
|
40
|
-
|
|
41
|
-
- 想上手,用 `pnpm ...`
|
|
42
|
-
- 想看清楚实际做的是哪个命令,用 `repo ...`
|
|
43
|
-
- 想做高级操作,再看分组命令
|
|
44
|
-
|
|
45
|
-
## 最常用的命令
|
|
46
|
-
|
|
47
|
-
### 1. 仓库初始化与新建
|
|
38
|
+
在由模板生成的仓库里,同一套工作流会暴露成更短的根脚本:
|
|
48
39
|
|
|
49
40
|
```bash
|
|
50
41
|
pnpm setup
|
|
51
|
-
pnpm new my-package
|
|
52
|
-
pnpm new my-app --template client
|
|
53
|
-
```
|
|
54
|
-
|
|
55
|
-
- `setup` 是老仓库接入模板标准资产的第一步。
|
|
56
|
-
- `new` 支持交互式选择,也支持 `--template` 直接指定模板。
|
|
57
|
-
- 如果在 `repoctl.config.ts` 中设置了 `commands.create.defaultTemplate`,那么 `repo new foo` 会直接创建,不再多问一次模板。
|
|
58
|
-
|
|
59
|
-
### 2. 诊断、校验、同步
|
|
60
|
-
|
|
61
|
-
```bash
|
|
62
|
-
pnpm doctor
|
|
63
|
-
pnpm check
|
|
64
|
-
pnpm exec repo upgrade
|
|
65
|
-
```
|
|
66
|
-
|
|
67
|
-
- `doctor` 看“仓库能不能顺利开始使用”
|
|
68
|
-
- `check` 看“当前改动能不能顺利提交”
|
|
69
|
-
- `upgrade` 看“模板最新的标准资产要不要同步进来”
|
|
70
|
-
|
|
71
|
-
这三个命令不要混着理解:
|
|
72
|
-
|
|
73
|
-
| 命令 | 解决的问题 |
|
|
74
|
-
| --------- | ---------------------------------------------------- |
|
|
75
|
-
| `doctor` | 当前目录是不是一个正确、完整、可用的 monorepo 根目录 |
|
|
76
|
-
| `check` | 当前提交前校验是否能过 |
|
|
77
|
-
| `upgrade` | 我要不要把最新模板里的脚本、配置、工作流同步过来 |
|
|
78
|
-
|
|
79
|
-
## 你现在拿到的基础架子
|
|
80
|
-
|
|
81
|
-
| 目录 | 作用 |
|
|
82
|
-
| --------------------- | ---------------------------------------------- |
|
|
83
|
-
| `templates/cli` | TypeScript CLI 模板 |
|
|
84
|
-
| `templates/client` | Vue 3 + Vite 客户端模板 |
|
|
85
|
-
| `templates/server` | Hono 服务端模板 |
|
|
86
|
-
| `templates/tsdown` | 使用 `tsdown` 的 TypeScript 类库模板 |
|
|
87
|
-
| `templates/vue-lib` | Vue 组件库模板 |
|
|
88
|
-
| `templates/vitepress` | 文档站模板 |
|
|
89
|
-
| `packages/monorepo` | 真正的 CLI 核心实现、升级逻辑、tooling wrapper |
|
|
90
|
-
| `packages/repoctl` | 面向使用者的默认包名与入口封装 |
|
|
91
|
-
|
|
92
|
-
## 推荐上手路径
|
|
93
|
-
|
|
94
|
-
### 场景 1:你刚用模板创建了一个新仓库
|
|
95
|
-
|
|
96
|
-
```bash
|
|
97
|
-
pnpm install
|
|
98
42
|
pnpm doctor
|
|
99
43
|
pnpm new
|
|
100
44
|
pnpm check
|
|
101
|
-
pnpm build
|
|
102
|
-
```
|
|
103
|
-
|
|
104
|
-
这时通常不需要先跑 `upgrade`,因为模板本身已经是新生成的。
|
|
105
|
-
|
|
106
|
-
### 场景 2:你把 `repoctl` 接进一个已有仓库
|
|
107
|
-
|
|
108
|
-
```bash
|
|
109
|
-
pnpm install
|
|
110
|
-
pnpm exec repo setup
|
|
111
|
-
pnpm exec repo doctor
|
|
112
|
-
pnpm exec repo upgrade
|
|
113
|
-
pnpm exec repo doctor
|
|
114
|
-
```
|
|
115
|
-
|
|
116
|
-
这里先 `doctor` 一次,是为了看现在缺什么;`upgrade` 之后再跑一次,可以确认问题是不是已经被修平。
|
|
117
|
-
|
|
118
|
-
## 配置文件约定
|
|
119
|
-
|
|
120
|
-
推荐只使用一个配置文件:
|
|
121
|
-
|
|
122
|
-
```txt
|
|
123
|
-
repoctl.config.ts
|
|
124
|
-
```
|
|
125
|
-
|
|
126
|
-
兼容旧文件名:
|
|
127
|
-
|
|
128
|
-
```txt
|
|
129
|
-
monorepo.config.ts
|
|
130
|
-
```
|
|
131
|
-
|
|
132
|
-
但两者不能同时存在。现在 CLI 会明确拒绝加载冲突配置,`repo doctor` 也会直接把这个问题标红。
|
|
133
|
-
|
|
134
|
-
最小示例:
|
|
135
|
-
|
|
136
|
-
```ts
|
|
137
|
-
import { defineMonorepoConfig } from 'repoctl'
|
|
138
|
-
|
|
139
|
-
export default defineMonorepoConfig({
|
|
140
|
-
commands: {
|
|
141
|
-
create: {
|
|
142
|
-
defaultTemplate: 'tsdown',
|
|
143
|
-
},
|
|
144
|
-
upgrade: {
|
|
145
|
-
skipOverwrite: true,
|
|
146
|
-
},
|
|
147
|
-
},
|
|
148
|
-
})
|
|
149
|
-
```
|
|
150
|
-
|
|
151
|
-
## 默认质量门禁
|
|
152
|
-
|
|
153
|
-
模板默认鼓励你走这条链路:
|
|
154
|
-
|
|
155
|
-
1. `pnpm build`
|
|
156
|
-
2. `pnpm lint`
|
|
157
|
-
3. `pnpm typecheck`
|
|
158
|
-
4. `pnpm tsd`
|
|
159
|
-
5. `pnpm test`
|
|
160
|
-
|
|
161
|
-
如果仓库保留了默认的 `.husky` 与 `lint-staged.config.js`:
|
|
162
|
-
|
|
163
|
-
- `pre-commit` 会聚焦 staged 文件
|
|
164
|
-
- 样式文件会跑 `stylelint`
|
|
165
|
-
- JS / TS / Vue 会跑 `eslint`
|
|
166
|
-
- TS / Vue 相关文件会按 workspace 跑 `typecheck`
|
|
167
|
-
- `pre-push` 会补跑整仓的 `lint`、`typecheck`,以及受影响包的 `build` / `test` / `tsd`
|
|
168
|
-
|
|
169
|
-
## 下一步看哪里
|
|
170
|
-
|
|
171
|
-
- 想理解为什么这套模板这样拆:[为什么往 monorepo 方向演进](./monorepo/index.md)
|
|
172
|
-
- 第一次接手仓库先看:[新手使用指南](./getting-started.md)
|
|
173
|
-
- 想看真实的日常管理方式:[如何管理 monorepo](./monorepo/manage.md)
|
|
174
|
-
- 想要最完整的命令速查:[命令速查](./monorepo/commands.md)
|
|
175
|
-
- 命令报错了怎么处理:[排障指南](./monorepo/troubleshooting.md)
|
|
176
|
-
- 要发包和生成 changelog:[发包与变更日志](./monorepo/publish.md)
|
|
177
|
-
|
|
178
|
-
## 兼容命令说明
|
|
179
|
-
|
|
180
|
-
下面这些命令依然可用:
|
|
181
|
-
|
|
182
|
-
```bash
|
|
183
|
-
pnpm exec repoctl doctor
|
|
184
|
-
pnpm exec repoctl new
|
|
185
|
-
pnpm exec monorepo doctor
|
|
186
|
-
pnpm exec monorepo ws up
|
|
187
45
|
```
|
|
188
46
|
|
|
189
|
-
|
|
47
|
+
## 你可以继续阅读
|
|
190
48
|
|
|
191
|
-
-
|
|
192
|
-
-
|
|
49
|
+
- [repoctl 概览](./repoctl/index.md)
|
|
50
|
+
- [快速开始](./repoctl/getting-started.md)
|
|
51
|
+
- [接入已有仓库](./repoctl/adopt-existing.md)
|
|
52
|
+
- [按场景选命令](./repoctl/scenarios.md)
|
|
53
|
+
- [命令速查](./repoctl/commands.md)
|
|
54
|
+
- [配置文件](./repoctl/config.md)
|
|
55
|
+
- [模板与创建](./repoctl/templates.md)
|
|
56
|
+
- [工作流与 CI](./repoctl/workflows.md)
|
|
57
|
+
- [知识库:为什么往 monorepo 方向演进](./monorepo/index.md)
|
|
@@ -1,291 +1,21 @@
|
|
|
1
1
|
# 命令速查
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
repoctl 现在是这套文档的主线。完整命令说明请阅读:
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
- [repoctl 命令速查](../repoctl/commands.md)
|
|
6
|
+
- [repoctl 模板与创建](../repoctl/templates.md)
|
|
7
|
+
- [repoctl 排障与报告](../repoctl/troubleshooting.md)
|
|
6
8
|
|
|
7
|
-
|
|
9
|
+
## monorepo 知识点:为什么要统一命令入口
|
|
8
10
|
|
|
9
|
-
|
|
10
|
-
pnpm setup
|
|
11
|
-
pnpm doctor
|
|
12
|
-
pnpm new
|
|
13
|
-
pnpm check
|
|
14
|
-
```
|
|
11
|
+
monorepo 的难点通常不是“能不能跑某个工具”,而是团队成员是否能稳定地用同一套入口完成日常动作。
|
|
15
12
|
|
|
16
|
-
|
|
13
|
+
repoctl 把命令分成三层:
|
|
17
14
|
|
|
18
|
-
|
|
|
19
|
-
|
|
|
20
|
-
| `pnpm
|
|
21
|
-
| `pnpm
|
|
22
|
-
| `
|
|
23
|
-
| `pnpm check` | `repo check` |
|
|
15
|
+
| 层级 | 示例 | 适合场景 |
|
|
16
|
+
| -------- | --------------------------------- | -------------------- |
|
|
17
|
+
| 根脚本 | `pnpm doctor` / `pnpm new` | 日常开发和团队教程 |
|
|
18
|
+
| 主 CLI | `pnpm exec repo doctor` | CI、脚本、排障和文档 |
|
|
19
|
+
| 分组命令 | `repo ws ls` / `repo env support` | 维护者和自动化 |
|
|
24
20
|
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
### 新仓库
|
|
28
|
-
|
|
29
|
-
```bash
|
|
30
|
-
pnpm install
|
|
31
|
-
pnpm doctor
|
|
32
|
-
pnpm new
|
|
33
|
-
pnpm check
|
|
34
|
-
```
|
|
35
|
-
|
|
36
|
-
### 存量仓库接入
|
|
37
|
-
|
|
38
|
-
```bash
|
|
39
|
-
pnpm install
|
|
40
|
-
pnpm exec repo setup
|
|
41
|
-
pnpm exec repo doctor
|
|
42
|
-
pnpm exec repo upgrade
|
|
43
|
-
pnpm exec repo doctor
|
|
44
|
-
```
|
|
45
|
-
|
|
46
|
-
## 顶层命令
|
|
47
|
-
|
|
48
|
-
### `repo setup`
|
|
49
|
-
|
|
50
|
-
```bash
|
|
51
|
-
repo setup
|
|
52
|
-
repo setup --yes
|
|
53
|
-
repo setup --preset minimal
|
|
54
|
-
repo setup --preset standard --force
|
|
55
|
-
repo setup --overwrite
|
|
56
|
-
```
|
|
57
|
-
|
|
58
|
-
用途:
|
|
59
|
-
|
|
60
|
-
- 初始化当前 workspace 的推荐默认值
|
|
61
|
-
- 默认不覆盖已有 README、package.json、pnpm-workspace.yaml 和 tooling 配置
|
|
62
|
-
- 会追加缺失的 `apps/*`、`packages/*`、`examples/*` workspace patterns
|
|
63
|
-
- `--yes` 用于 CI / 非 TTY 环境,使用安全默认行为
|
|
64
|
-
- 需要重写受管理文件时显式传 `--force` 或 `--overwrite`
|
|
65
|
-
|
|
66
|
-
### `repo doctor`
|
|
67
|
-
|
|
68
|
-
```bash
|
|
69
|
-
repo doctor
|
|
70
|
-
repo doctor --strict
|
|
71
|
-
repo doctor --json
|
|
72
|
-
repo doctor --json --out reports/doctor.json
|
|
73
|
-
repo doctor --markdown --out reports/doctor.md
|
|
74
|
-
repo doctor --markdown --redact --out reports/doctor.md
|
|
75
|
-
```
|
|
76
|
-
|
|
77
|
-
用途:
|
|
78
|
-
|
|
79
|
-
- 诊断当前目录是不是可直接开始使用的 monorepo 根目录
|
|
80
|
-
- 检查 Node 版本、workspace 文件、CLI 依赖、根脚本、配置冲突、提交链路
|
|
81
|
-
- `--strict` 会把 warning 也视为失败,适合 CI 门禁或团队模板验收
|
|
82
|
-
- `--json` 只输出结构化报告,适合 CI、脚本和编辑器集成
|
|
83
|
-
- `--markdown` 输出适合贴到 issue / PR 的摘要报告
|
|
84
|
-
- `--redact` 会脱敏 workspace / cwd / home 绝对路径,适合发给外部协作者
|
|
85
|
-
- `--out <file>` 把文本、JSON 或 Markdown 报告写入文件,仍会按 blocking issue 返回非零状态
|
|
86
|
-
|
|
87
|
-
### `repo new`
|
|
88
|
-
|
|
89
|
-
```bash
|
|
90
|
-
repo new
|
|
91
|
-
repo new sdk --template tsdown
|
|
92
|
-
repo new docs --template vitepress
|
|
93
|
-
repo new docs --template vitepress --dry-run
|
|
94
|
-
repo new docs --template vitepress --json
|
|
95
|
-
repo new docs --template vitepress --json --out plans/docs.json
|
|
96
|
-
```
|
|
97
|
-
|
|
98
|
-
用途:
|
|
99
|
-
|
|
100
|
-
- 交互式或直接创建新的 package / app
|
|
101
|
-
- `--dry-run` 只预览模板、目标目录、package 名称和输出文件,不写入磁盘
|
|
102
|
-
- `--json` 以结构化数据输出创建预览,隐含 `--dry-run`
|
|
103
|
-
- `--out <file>` 把当前创建预览写入文件,也隐含 `--dry-run`
|
|
104
|
-
- 显式传入的 `--template` 会先校验,拼错时会失败并提示相近模板 key
|
|
105
|
-
|
|
106
|
-
### `repo templates`
|
|
107
|
-
|
|
108
|
-
```bash
|
|
109
|
-
repo templates
|
|
110
|
-
repo templates tsdown
|
|
111
|
-
repo templates --category library
|
|
112
|
-
repo templates --check
|
|
113
|
-
repo templates --check --json
|
|
114
|
-
repo templates --json
|
|
115
|
-
repo templates --markdown
|
|
116
|
-
repo templates tsdown --markdown
|
|
117
|
-
repo templates --markdown --out docs/templates.md
|
|
118
|
-
```
|
|
119
|
-
|
|
120
|
-
用途:
|
|
121
|
-
|
|
122
|
-
- 查看内置模板 key、分类、默认生成目录和用途
|
|
123
|
-
- 传入模板 key 时查看单个模板详情
|
|
124
|
-
- `--check` 检查内置模板元数据、目录、package.json 和临时文件
|
|
125
|
-
- 在写自动化脚本时用 `--json` 获取结构化输出
|
|
126
|
-
- 用 `--markdown` 生成可直接放进文档的模板表格或详情页
|
|
127
|
-
- 用 `--out <file>` 把当前 JSON、Markdown 或文本输出写入文件
|
|
128
|
-
|
|
129
|
-
### `repo check`
|
|
130
|
-
|
|
131
|
-
```bash
|
|
132
|
-
repo check
|
|
133
|
-
repo check --staged
|
|
134
|
-
repo check --full
|
|
135
|
-
repo check --edit-file .git/COMMIT_EDITMSG
|
|
136
|
-
repo check --dry-run
|
|
137
|
-
repo check --json --out reports/check-plan.json
|
|
138
|
-
repo check --markdown --out reports/check-plan.md
|
|
139
|
-
repo check --markdown --redact --out reports/check-plan.md
|
|
140
|
-
```
|
|
141
|
-
|
|
142
|
-
用途:
|
|
143
|
-
|
|
144
|
-
- 运行推荐的本地校验入口
|
|
145
|
-
- `--staged` 偏 pre-commit
|
|
146
|
-
- `--full` 偏 pre-push
|
|
147
|
-
- `--edit-file` 用于 commit message 校验
|
|
148
|
-
- `--dry-run` 只预览将要执行的校验
|
|
149
|
-
- `--json` / `--out <file>` 输出校验计划,适合 CI、脚本和编辑器集成
|
|
150
|
-
- `--markdown` 输出适合贴到 PR / issue 的校验计划摘要
|
|
151
|
-
- `--redact` 会脱敏 cwd / home 绝对路径,适合发给外部协作者
|
|
152
|
-
|
|
153
|
-
### `repo upgrade`
|
|
154
|
-
|
|
155
|
-
```bash
|
|
156
|
-
repo upgrade
|
|
157
|
-
repo upgrade --yes
|
|
158
|
-
repo upgrade --overwrite
|
|
159
|
-
repo upgrade --no-overwrite
|
|
160
|
-
repo upgrade --core
|
|
161
|
-
repo upgrade -i
|
|
162
|
-
repo upgrade -s
|
|
163
|
-
```
|
|
164
|
-
|
|
165
|
-
用途:
|
|
166
|
-
|
|
167
|
-
- 同步仓库标准资产与脚本
|
|
168
|
-
|
|
169
|
-
常见参数:
|
|
170
|
-
|
|
171
|
-
- `--core`:只同步核心配置,跳过 GitHub 相关资产
|
|
172
|
-
- `-i`:交互式选择
|
|
173
|
-
- `--yes` / `--overwrite`:非交互覆盖 drifted 标准资产,并迁移旧 tooling loader import
|
|
174
|
-
- `--no-overwrite` / `-s`:保留已有 drifted 文件
|
|
175
|
-
- 非 TTY 环境不会弹出选择框,也不会抛 prompt 退出错误
|
|
176
|
-
|
|
177
|
-
### 兼容命令
|
|
178
|
-
|
|
179
|
-
```bash
|
|
180
|
-
repo sync
|
|
181
|
-
repo clean --yes
|
|
182
|
-
repo mirror
|
|
183
|
-
```
|
|
184
|
-
|
|
185
|
-
- `sync`:兼容入口,本质上仍是升级同步
|
|
186
|
-
- `clean`:清理选中的 workspace 包
|
|
187
|
-
- `mirror`:设置 VS Code 相关镜像环境变量
|
|
188
|
-
|
|
189
|
-
## 分组命令
|
|
190
|
-
|
|
191
|
-
### workspace / ws
|
|
192
|
-
|
|
193
|
-
```bash
|
|
194
|
-
repo workspace upgrade
|
|
195
|
-
repo ws up
|
|
196
|
-
repo workspace init
|
|
197
|
-
repo ws ls
|
|
198
|
-
repo ws ls --json --out reports/workspaces.json
|
|
199
|
-
repo ws ls --markdown --redact --out reports/workspaces.md
|
|
200
|
-
repo workspace clean --yes
|
|
201
|
-
```
|
|
202
|
-
|
|
203
|
-
### tooling / tg
|
|
204
|
-
|
|
205
|
-
```bash
|
|
206
|
-
repo tooling init eslint vitest
|
|
207
|
-
repo tg init --all --force
|
|
208
|
-
```
|
|
209
|
-
|
|
210
|
-
### package / pkg
|
|
211
|
-
|
|
212
|
-
```bash
|
|
213
|
-
repo package create
|
|
214
|
-
repo pkg new
|
|
215
|
-
```
|
|
216
|
-
|
|
217
|
-
### verify / v
|
|
218
|
-
|
|
219
|
-
```bash
|
|
220
|
-
repo verify pre-commit
|
|
221
|
-
repo verify pre-push
|
|
222
|
-
repo verify commit-msg .git/COMMIT_EDITMSG
|
|
223
|
-
repo verify staged-typecheck packages/app/src/main.ts
|
|
224
|
-
```
|
|
225
|
-
|
|
226
|
-
### env / e
|
|
227
|
-
|
|
228
|
-
```bash
|
|
229
|
-
repo env info
|
|
230
|
-
repo e i --json --out reports/env.json
|
|
231
|
-
repo e i --markdown --redact --out reports/env.md
|
|
232
|
-
repo env snapshot --json --out reports/snapshot.json
|
|
233
|
-
repo env snapshot --markdown --redact --out reports/snapshot.md
|
|
234
|
-
repo env snapshot --markdown --redact --strict --out reports/snapshot.md
|
|
235
|
-
repo env paths --json --out reports/paths.json
|
|
236
|
-
repo env paths --markdown --redact --out reports/paths.md
|
|
237
|
-
repo env support --json --out reports/support.json
|
|
238
|
-
repo env support --json --redact --out reports/support.json
|
|
239
|
-
repo env support --markdown --redact --out reports/support.md
|
|
240
|
-
repo env support --markdown --redact --strict --out reports/support.md
|
|
241
|
-
repo env mirror
|
|
242
|
-
```
|
|
243
|
-
|
|
244
|
-
### config / cfg
|
|
245
|
-
|
|
246
|
-
```bash
|
|
247
|
-
repo config inspect
|
|
248
|
-
repo cfg i --json --out reports/config.json
|
|
249
|
-
repo cfg i --markdown --redact --out reports/config.md
|
|
250
|
-
```
|
|
251
|
-
|
|
252
|
-
### skills / sk
|
|
253
|
-
|
|
254
|
-
```bash
|
|
255
|
-
repo skills sync --codex
|
|
256
|
-
repo sk s --claude
|
|
257
|
-
```
|
|
258
|
-
|
|
259
|
-
### ai / ai p
|
|
260
|
-
|
|
261
|
-
```bash
|
|
262
|
-
repo ai prompt create --name checkout
|
|
263
|
-
repo ai p new
|
|
264
|
-
repo ai prompt create --tasks agentic/tasks.json -f
|
|
265
|
-
```
|
|
266
|
-
|
|
267
|
-
## `repo`、`repoctl`、`monorepo` 的关系
|
|
268
|
-
|
|
269
|
-
三者共用同一套 CLI 实现:
|
|
270
|
-
|
|
271
|
-
```bash
|
|
272
|
-
repo doctor
|
|
273
|
-
repoctl doctor
|
|
274
|
-
monorepo doctor
|
|
275
|
-
```
|
|
276
|
-
|
|
277
|
-
都能用,但推荐顺序是:
|
|
278
|
-
|
|
279
|
-
1. `pnpm setup / doctor / new / check`
|
|
280
|
-
2. `repo ...`
|
|
281
|
-
3. `repoctl ...` 或 `monorepo ...` 仅作为兼容入口
|
|
282
|
-
|
|
283
|
-
## 什么时候用哪个命令
|
|
284
|
-
|
|
285
|
-
| 你的问题 | 先用什么 |
|
|
286
|
-
| -------------------------- | -------------- |
|
|
287
|
-
| 仓库是不是搭对了 | `repo doctor` |
|
|
288
|
-
| 我现在这次改动能不能过校验 | `repo check` |
|
|
289
|
-
| 我要补齐模板最新脚本和配置 | `repo upgrade` |
|
|
290
|
-
| 我要新增一个子包 | `repo new` |
|
|
291
|
-
| 我要直接操作更细的模块 | 分组命令 |
|
|
21
|
+
保留这个旧页面,是为了让已有链接继续可用,同时把读者导向新的 repoctl 命令文档。
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
# 如何管理 monorepo
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
这一页是 repoctl 文档后面的知识库页面。它不再重新解释所有命令参数,而是解释:为什么这些命令能让 monorepo 日常管理变简单。
|
|
4
|
+
|
|
5
|
+
如果你只想查命令,直接看 [repoctl 工作流与 CI](../repoctl/workflows.md) 或 [repoctl 命令速查](../repoctl/commands.md)。
|
|
4
6
|
|
|
5
7
|
## 先记住默认工作流
|
|
6
8
|
|
|
@@ -20,6 +22,16 @@ pnpm build
|
|
|
20
22
|
pnpm setup
|
|
21
23
|
```
|
|
22
24
|
|
|
25
|
+
这个工作流背后的顺序是:
|
|
26
|
+
|
|
27
|
+
| 阶段 | 目标 |
|
|
28
|
+
| ---- | ------------------------------------------------ |
|
|
29
|
+
| 安装 | 让 workspace 依赖和本地包链接完整 |
|
|
30
|
+
| 诊断 | 先确认仓库结构、Node、脚本、配置和提交链路可用 |
|
|
31
|
+
| 创建 | 用模板生成新包,减少手写 package metadata 和配置 |
|
|
32
|
+
| 校验 | 在提交前复现默认 hook 和 workspace typecheck |
|
|
33
|
+
| 构建 | 最后再跑更重的全仓任务 |
|
|
34
|
+
|
|
23
35
|
## 命令分层
|
|
24
36
|
|
|
25
37
|
这套模板故意把入口做得很少。
|
|
@@ -225,6 +237,7 @@ pnpm test
|
|
|
225
237
|
|
|
226
238
|
## 继续阅读
|
|
227
239
|
|
|
228
|
-
- [
|
|
229
|
-
- [
|
|
240
|
+
- [repoctl 工作流与 CI](../repoctl/workflows.md)
|
|
241
|
+
- [repoctl 命令速查](../repoctl/commands.md)
|
|
242
|
+
- [repoctl 排障与报告](../repoctl/troubleshooting.md)
|
|
230
243
|
- [发包与变更日志](./publish.md)
|
|
@@ -7,6 +7,31 @@
|
|
|
7
7
|
- changelog 可以稳定产出
|
|
8
8
|
- 很容易接到 CI 里
|
|
9
9
|
|
|
10
|
+
repoctl 在发布流程里的位置很明确:它不替代 `changesets` 发布版本,而是在发布前帮你确认仓库状态、模板资产和校验计划。
|
|
11
|
+
|
|
12
|
+
## repoctl 在发布前做什么
|
|
13
|
+
|
|
14
|
+
```bash
|
|
15
|
+
pnpm exec repo doctor --strict
|
|
16
|
+
pnpm exec repo check --full
|
|
17
|
+
pnpm exec repo env support --markdown --redact --out reports/support.md
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
| 命令 | 发布前价值 |
|
|
21
|
+
| ---------------------- | -------------------------------------------------------- |
|
|
22
|
+
| `repo doctor --strict` | 确认仓库结构、Node、脚本、配置和提交链路没有漂移 |
|
|
23
|
+
| `repo check --full` | 跑根脚本里的 lint/typecheck/test/build 计划 |
|
|
24
|
+
| `repo env support` | 保存环境、配置、doctor 和 check plan,方便发布失败后回溯 |
|
|
25
|
+
|
|
26
|
+
发布本身仍交给 `changesets`:
|
|
27
|
+
|
|
28
|
+
```bash
|
|
29
|
+
pnpm changeset
|
|
30
|
+
pnpm exec repo release stable
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
正式发布只走 `main`;`alpha`、`beta`、`rc`、`next` 只做 Changesets 的 prerelease,并发布对应 tag 包。
|
|
34
|
+
|
|
10
35
|
## 一条务实的发布流程
|
|
11
36
|
|
|
12
37
|
先把顺序记住:
|
|
@@ -90,11 +115,10 @@ changeset 文件本身就是最便宜的“发布预告”。代码评审时顺
|
|
|
90
115
|
### 手动流程
|
|
91
116
|
|
|
92
117
|
```bash
|
|
93
|
-
pnpm
|
|
94
|
-
pnpm publish-packages
|
|
118
|
+
pnpm exec repo release stable
|
|
95
119
|
```
|
|
96
120
|
|
|
97
|
-
`changeset version` 会做这些事:
|
|
121
|
+
`repo release stable` 会先执行构建、lint 和测试,再调用 `changeset version` 与 `changeset publish`。其中 `changeset version` 会做这些事:
|
|
98
122
|
|
|
99
123
|
- 更新受影响包的版本号
|
|
100
124
|
- 调整内部依赖版本
|
|
@@ -113,6 +137,10 @@ on:
|
|
|
113
137
|
push:
|
|
114
138
|
branches:
|
|
115
139
|
- main
|
|
140
|
+
- alpha
|
|
141
|
+
- beta
|
|
142
|
+
- rc
|
|
143
|
+
- next
|
|
116
144
|
workflow_dispatch:
|
|
117
145
|
|
|
118
146
|
permissions:
|
|
@@ -126,6 +154,7 @@ env:
|
|
|
126
154
|
|
|
127
155
|
jobs:
|
|
128
156
|
release:
|
|
157
|
+
if: github.ref_name == 'main'
|
|
129
158
|
runs-on: ubuntu-latest
|
|
130
159
|
steps:
|
|
131
160
|
- uses: actions/checkout@v4
|
|
@@ -139,9 +168,25 @@ jobs:
|
|
|
139
168
|
- name: Create Release Pull Request or Publish to npm
|
|
140
169
|
uses: changesets/action@v1
|
|
141
170
|
with:
|
|
142
|
-
publish: pnpm
|
|
171
|
+
publish: pnpm exec repo release stable
|
|
143
172
|
env:
|
|
144
173
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
174
|
+
|
|
175
|
+
prerelease:
|
|
176
|
+
if: github.ref_name != 'main'
|
|
177
|
+
runs-on: ubuntu-latest
|
|
178
|
+
steps:
|
|
179
|
+
- uses: actions/checkout@v4
|
|
180
|
+
- uses: pnpm/action-setup@v4
|
|
181
|
+
- uses: actions/setup-node@v4
|
|
182
|
+
with:
|
|
183
|
+
node-version: 24
|
|
184
|
+
cache: pnpm
|
|
185
|
+
- run: pnpm install
|
|
186
|
+
- run: git config user.name "github-actions[bot]"
|
|
187
|
+
- run: git config user.email "41898282+github-actions[bot]@users.noreply.github.com"
|
|
188
|
+
- name: Publish Prerelease
|
|
189
|
+
run: pnpm exec repo release pre publish
|
|
145
190
|
```
|
|
146
191
|
|
|
147
192
|
## 关于 npm 鉴权
|
|
@@ -209,5 +254,6 @@ permissions:
|
|
|
209
254
|
## 继续阅读
|
|
210
255
|
|
|
211
256
|
- [如何管理 monorepo](./manage.md)
|
|
212
|
-
- [
|
|
213
|
-
- [
|
|
257
|
+
- [repoctl 工作流与 CI](../repoctl/workflows.md)
|
|
258
|
+
- [repoctl 排障与报告](../repoctl/troubleshooting.md)
|
|
259
|
+
- [命令别名](../repoctl/aliases.md)
|