@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
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
# 配置文件
|
|
2
|
+
|
|
3
|
+
repoctl 推荐在仓库根目录使用一个配置文件:
|
|
4
|
+
|
|
5
|
+
```txt
|
|
6
|
+
repoctl.config.ts
|
|
7
|
+
```
|
|
8
|
+
|
|
9
|
+
旧文件名 `monorepo.config.ts` 继续兼容,但两者不能同时存在。`repo doctor` 会把冲突配置标记为阻塞问题。
|
|
10
|
+
|
|
11
|
+
## 最小配置
|
|
12
|
+
|
|
13
|
+
```ts
|
|
14
|
+
import { defineMonorepoConfig } from 'repoctl'
|
|
15
|
+
|
|
16
|
+
export default defineMonorepoConfig({
|
|
17
|
+
commands: {
|
|
18
|
+
create: {
|
|
19
|
+
defaultTemplate: 'tsdown',
|
|
20
|
+
},
|
|
21
|
+
},
|
|
22
|
+
})
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
设置 `commands.create.defaultTemplate` 后:
|
|
26
|
+
|
|
27
|
+
```bash
|
|
28
|
+
repo new utils
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
会直接按默认模板创建,不再询问模板类型。
|
|
32
|
+
|
|
33
|
+
## 常用配置
|
|
34
|
+
|
|
35
|
+
```ts
|
|
36
|
+
import { defineMonorepoConfig } from 'repoctl'
|
|
37
|
+
|
|
38
|
+
export default defineMonorepoConfig({
|
|
39
|
+
commands: {
|
|
40
|
+
init: {
|
|
41
|
+
preset: 'standard',
|
|
42
|
+
},
|
|
43
|
+
create: {
|
|
44
|
+
defaultTemplate: 'tsdown',
|
|
45
|
+
},
|
|
46
|
+
clean: {
|
|
47
|
+
autoConfirm: true,
|
|
48
|
+
},
|
|
49
|
+
upgrade: {
|
|
50
|
+
skipOverwrite: true,
|
|
51
|
+
},
|
|
52
|
+
},
|
|
53
|
+
})
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
| 配置 | 作用 |
|
|
57
|
+
| --------------------------------- | --------------------------------------- |
|
|
58
|
+
| `commands.init.preset` | 控制初始化默认预设 |
|
|
59
|
+
| `commands.create.defaultTemplate` | 控制 `repo new <name>` 的默认模板 |
|
|
60
|
+
| `commands.clean.autoConfirm` | 清理命令是否默认确认 |
|
|
61
|
+
| `commands.upgrade.skipOverwrite` | 同步标准资产时是否保留已有 drifted 文件 |
|
|
62
|
+
|
|
63
|
+
## 查看当前配置
|
|
64
|
+
|
|
65
|
+
```bash
|
|
66
|
+
repo config inspect
|
|
67
|
+
repo cfg i --json --out reports/config.json
|
|
68
|
+
repo cfg i --markdown --redact --out reports/config.md
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
`--redact` 适合把报告发到 issue、PR 或外部协作渠道。
|
|
72
|
+
|
|
73
|
+
## 配置的定位
|
|
74
|
+
|
|
75
|
+
配置文件只负责团队默认值,不建议把一次性命令参数都写进去。
|
|
76
|
+
|
|
77
|
+
推荐做法:
|
|
78
|
+
|
|
79
|
+
- 团队长期一致的选择写进 `repoctl.config.ts`。
|
|
80
|
+
- 临时行为用命令参数表达,例如 `--dry-run`、`--json`、`--out`。
|
|
81
|
+
- 自动化脚本优先使用显式参数,减少隐藏状态。
|
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
# 快速开始
|
|
2
|
+
|
|
3
|
+
这一页按“把 repoctl 接进一个仓库”的顺序写。你不需要先理解所有工具,先让仓库能被诊断、能创建包、能跑提交前校验。
|
|
4
|
+
|
|
5
|
+
## 准备环境
|
|
6
|
+
|
|
7
|
+
- Node.js 20 或更高版本。
|
|
8
|
+
- pnpm。推荐通过 Corepack 启用:`corepack enable`。
|
|
9
|
+
- Git。`repo doctor` 会读取仓库信息,用来补全 package metadata 和诊断提交链路。
|
|
10
|
+
|
|
11
|
+
```bash
|
|
12
|
+
node -v
|
|
13
|
+
pnpm -v
|
|
14
|
+
git --version
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
## 安装 repoctl
|
|
18
|
+
|
|
19
|
+
```bash
|
|
20
|
+
pnpm add -D repoctl
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
如果你使用的是这套模板生成的新仓库,依赖和根脚本通常已经准备好了,可以直接从 `pnpm install` 开始。
|
|
24
|
+
|
|
25
|
+
## 初始化仓库默认值
|
|
26
|
+
|
|
27
|
+
```bash
|
|
28
|
+
pnpm install
|
|
29
|
+
pnpm exec repo setup
|
|
30
|
+
pnpm exec repo doctor
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
这三步分别解决:
|
|
34
|
+
|
|
35
|
+
| 命令 | 作用 |
|
|
36
|
+
| -------------- | --------------------------------------------------- |
|
|
37
|
+
| `pnpm install` | 安装 workspace 依赖并创建本地链接 |
|
|
38
|
+
| `repo setup` | 补齐推荐根脚本、workspace patterns 和基础工具链入口 |
|
|
39
|
+
| `repo doctor` | 检查根目录、Node 版本、CLI 依赖、配置冲突和提交链路 |
|
|
40
|
+
|
|
41
|
+
如果 `doctor` 报错,先按输出里的 `fix:` 处理。处理完再跑一次 `pnpm exec repo doctor`。
|
|
42
|
+
|
|
43
|
+
## 创建第一个包
|
|
44
|
+
|
|
45
|
+
先看模板列表:
|
|
46
|
+
|
|
47
|
+
```bash
|
|
48
|
+
pnpm exec repo templates
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
创建一个 TypeScript 库:
|
|
52
|
+
|
|
53
|
+
```bash
|
|
54
|
+
pnpm exec repo new sdk --template tsdown
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
创建前只想预览:
|
|
58
|
+
|
|
59
|
+
```bash
|
|
60
|
+
pnpm exec repo new sdk --template tsdown --dry-run
|
|
61
|
+
pnpm exec repo new sdk --template tsdown --json --out plans/sdk.json
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
`--json` 和 `--out` 会隐含 `--dry-run`,适合 CI、编辑器和脚本读取创建计划。
|
|
65
|
+
|
|
66
|
+
## 使用短脚本
|
|
67
|
+
|
|
68
|
+
如果仓库已经通过 `repo setup` 或模板生成补齐了根脚本,日常可以写得更短:
|
|
69
|
+
|
|
70
|
+
```bash
|
|
71
|
+
pnpm setup
|
|
72
|
+
pnpm doctor
|
|
73
|
+
pnpm new sdk --template tsdown
|
|
74
|
+
pnpm check
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
对应关系:
|
|
78
|
+
|
|
79
|
+
| 短脚本 | 等价命令 |
|
|
80
|
+
| ------------- | ----------------------- |
|
|
81
|
+
| `pnpm setup` | `pnpm exec repo setup` |
|
|
82
|
+
| `pnpm doctor` | `pnpm exec repo doctor` |
|
|
83
|
+
| `pnpm new` | `pnpm exec repo new` |
|
|
84
|
+
| `pnpm check` | `pnpm exec repo check` |
|
|
85
|
+
|
|
86
|
+
## 提交前检查
|
|
87
|
+
|
|
88
|
+
```bash
|
|
89
|
+
pnpm build
|
|
90
|
+
pnpm lint
|
|
91
|
+
pnpm typecheck
|
|
92
|
+
pnpm test
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
如果只想走 repoctl 推荐的本地检查入口:
|
|
96
|
+
|
|
97
|
+
```bash
|
|
98
|
+
pnpm check
|
|
99
|
+
pnpm exec repo check --dry-run
|
|
100
|
+
pnpm exec repo check --json --out reports/check-plan.json
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
## 同步模板标准资产
|
|
104
|
+
|
|
105
|
+
当模板升级后,用 `upgrade` 同步新的默认配置和脚本:
|
|
106
|
+
|
|
107
|
+
```bash
|
|
108
|
+
pnpm exec repo upgrade
|
|
109
|
+
pnpm exec repo upgrade --no-overwrite
|
|
110
|
+
pnpm exec repo upgrade --yes
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
- `--no-overwrite`:保留已有 drifted 文件。
|
|
114
|
+
- `--yes` / `--overwrite`:适合明确要覆盖标准资产的自动化场景。
|
|
115
|
+
- 非 TTY 环境不会弹出交互提示。
|
|
116
|
+
|
|
117
|
+
## 常见下一步
|
|
118
|
+
|
|
119
|
+
- 已有仓库渐进接入:阅读 [接入已有仓库](./adopt-existing.md)。
|
|
120
|
+
- 想固定默认模板:阅读 [配置文件](./config.md)。
|
|
121
|
+
- 想查看所有模板:阅读 [模板与创建](./templates.md)。
|
|
122
|
+
- 想把诊断结果发给同事:阅读 [排障与报告](./troubleshooting.md)。
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
# repoctl 概览
|
|
2
|
+
|
|
3
|
+
`repoctl` 是这套模板推荐给使用者的包名。默认命令是 `repo`,目标是把 pnpm workspace、Turborepo、模板创建、诊断报告和提交前校验收敛到一组稳定入口里。
|
|
4
|
+
|
|
5
|
+
它不替代 pnpm、Turbo 或 changesets,而是把这些工具在 monorepo 里的常见动作串起来。
|
|
6
|
+
|
|
7
|
+
## 什么时候使用 repoctl
|
|
8
|
+
|
|
9
|
+
| 场景 | 推荐入口 |
|
|
10
|
+
| ---------------------------------------- | ------------------------ |
|
|
11
|
+
| 给已有 pnpm workspace 补齐标准脚本和配置 | `pnpm exec repo setup` |
|
|
12
|
+
| 判断当前仓库是不是能顺利开发 | `pnpm exec repo doctor` |
|
|
13
|
+
| 创建新的包、应用、文档站或 CLI | `pnpm exec repo new` |
|
|
14
|
+
| 提交前复现推荐校验链路 | `pnpm exec repo check` |
|
|
15
|
+
| 同步模板最新标准资产 | `pnpm exec repo upgrade` |
|
|
16
|
+
| 给 CI、编辑器或脚本读取结构化结果 | `--json --out <file>` |
|
|
17
|
+
|
|
18
|
+
## 推荐命令层级
|
|
19
|
+
|
|
20
|
+
### 1. 生成仓库里的短脚本
|
|
21
|
+
|
|
22
|
+
```bash
|
|
23
|
+
pnpm setup
|
|
24
|
+
pnpm doctor
|
|
25
|
+
pnpm new
|
|
26
|
+
pnpm check
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
这是给日常开发和团队文档使用的入口。短、稳定、不需要先解释 CLI 包名。
|
|
30
|
+
|
|
31
|
+
### 2. 明确调用 repo CLI
|
|
32
|
+
|
|
33
|
+
```bash
|
|
34
|
+
pnpm exec repo setup
|
|
35
|
+
pnpm exec repo doctor
|
|
36
|
+
pnpm exec repo templates
|
|
37
|
+
pnpm exec repo new sdk --template tsdown
|
|
38
|
+
pnpm exec repo check --dry-run
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
这是文档、CI、脚本和排障里最清楚的写法。
|
|
42
|
+
|
|
43
|
+
### 3. 分组命令
|
|
44
|
+
|
|
45
|
+
```bash
|
|
46
|
+
pnpm exec repo ws ls
|
|
47
|
+
pnpm exec repo tg init --all
|
|
48
|
+
pnpm exec repo env support --markdown --redact
|
|
49
|
+
pnpm exec repo config inspect
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
这些入口适合已经熟悉 repoctl 的维护者,用来做更细的 workspace、tooling、环境和配置操作。
|
|
53
|
+
|
|
54
|
+
## 和旧入口的关系
|
|
55
|
+
|
|
56
|
+
`repoctl` 包仍然提供兼容入口,例如:
|
|
57
|
+
|
|
58
|
+
```bash
|
|
59
|
+
pnpm exec repoctl doctor
|
|
60
|
+
pnpm exec repoctl new
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
文档统一推荐 `repo`,是为了减少新人需要记住的名字。底层实现仍来自同一套 CLI。
|
|
64
|
+
|
|
65
|
+
## 下一步
|
|
66
|
+
|
|
67
|
+
- 第一次接入:[快速开始](./getting-started.md)
|
|
68
|
+
- 不知道用哪个命令:[按场景选命令](./scenarios.md)
|
|
69
|
+
- 查命令参数:[命令速查](./commands.md)
|
|
70
|
+
- 固化团队默认值:[配置文件](./config.md)
|
|
71
|
+
- 看可创建的模板:[模板与创建](./templates.md)
|
|
72
|
+
- 接入 CI 和本地流程:[工作流与 CI](./workflows.md)
|
|
73
|
+
- 生成排障报告:[排障与报告](./troubleshooting.md)
|
|
74
|
+
- 熟悉短命令:[命令别名](./aliases.md)
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
# 按场景选命令
|
|
2
|
+
|
|
3
|
+
如果你不确定该用哪个 repoctl 命令,先从这一页开始。
|
|
4
|
+
|
|
5
|
+
## 我刚拿到一个仓库
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
pnpm install
|
|
9
|
+
pnpm doctor
|
|
10
|
+
```
|
|
11
|
+
|
|
12
|
+
如果 `pnpm doctor` 不存在:
|
|
13
|
+
|
|
14
|
+
```bash
|
|
15
|
+
pnpm add -D repoctl
|
|
16
|
+
pnpm exec repo setup --yes
|
|
17
|
+
pnpm exec repo doctor
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
继续看:[快速开始](./getting-started.md)。
|
|
21
|
+
|
|
22
|
+
## 我要把 repoctl 接入旧仓库
|
|
23
|
+
|
|
24
|
+
```bash
|
|
25
|
+
pnpm add -D repoctl
|
|
26
|
+
pnpm exec repo setup --yes
|
|
27
|
+
pnpm exec repo doctor --markdown --redact --out reports/doctor-before.md
|
|
28
|
+
pnpm exec repo upgrade --no-overwrite
|
|
29
|
+
pnpm exec repo doctor --markdown --redact --out reports/doctor-after.md
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
继续看:[接入已有仓库](./adopt-existing.md)。
|
|
33
|
+
|
|
34
|
+
## 我要创建新包或应用
|
|
35
|
+
|
|
36
|
+
```bash
|
|
37
|
+
pnpm exec repo templates
|
|
38
|
+
pnpm exec repo new sdk --template tsdown
|
|
39
|
+
pnpm exec repo new docs --template vitepress --dry-run
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
如果只是日常开发,根脚本也可以:
|
|
43
|
+
|
|
44
|
+
```bash
|
|
45
|
+
pnpm new sdk --template tsdown
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
继续看:[模板与创建](./templates.md)。
|
|
49
|
+
|
|
50
|
+
## 我要提交前自查
|
|
51
|
+
|
|
52
|
+
```bash
|
|
53
|
+
pnpm check
|
|
54
|
+
pnpm exec repo check --dry-run
|
|
55
|
+
pnpm exec repo check --full
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
如果你想保存计划:
|
|
59
|
+
|
|
60
|
+
```bash
|
|
61
|
+
pnpm exec repo check --json --out reports/check-plan.json
|
|
62
|
+
pnpm exec repo check --markdown --redact --out reports/check-plan.md
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
继续看:[工作流与 CI](./workflows.md)。
|
|
66
|
+
|
|
67
|
+
## 我要调试 CI 或同事机器问题
|
|
68
|
+
|
|
69
|
+
```bash
|
|
70
|
+
pnpm exec repo doctor --markdown --redact --out reports/doctor.md
|
|
71
|
+
pnpm exec repo env support --markdown --redact --out reports/support.md
|
|
72
|
+
pnpm exec repo env snapshot --json --out reports/snapshot.json
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
继续看:[排障与报告](./troubleshooting.md)。
|
|
76
|
+
|
|
77
|
+
## 我要同步模板标准资产
|
|
78
|
+
|
|
79
|
+
```bash
|
|
80
|
+
pnpm exec repo upgrade --no-overwrite
|
|
81
|
+
pnpm exec repo upgrade --yes
|
|
82
|
+
pnpm exec repo upgrade --core
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
选择建议:
|
|
86
|
+
|
|
87
|
+
| 目标 | 命令 |
|
|
88
|
+
| ------------------------ | ----------------------------- |
|
|
89
|
+
| 第一次接入,保留已有配置 | `repo upgrade --no-overwrite` |
|
|
90
|
+
| 明确要覆盖标准资产 | `repo upgrade --yes` |
|
|
91
|
+
| 只同步核心配置 | `repo upgrade --core` |
|
|
92
|
+
|
|
93
|
+
## 我要看 workspace 结构
|
|
94
|
+
|
|
95
|
+
```bash
|
|
96
|
+
pnpm exec repo ws ls
|
|
97
|
+
pnpm exec repo ws ls --json --out reports/workspaces.json
|
|
98
|
+
pnpm exec repo ws ls --markdown --redact --out reports/workspaces.md
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
## 我要看配置是否生效
|
|
102
|
+
|
|
103
|
+
```bash
|
|
104
|
+
pnpm exec repo config inspect
|
|
105
|
+
pnpm exec repo cfg i --json --out reports/config.json
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
继续看:[配置文件](./config.md)。
|
|
109
|
+
|
|
110
|
+
## 我要写更短的命令
|
|
111
|
+
|
|
112
|
+
```bash
|
|
113
|
+
repo tpl
|
|
114
|
+
repo ws ls
|
|
115
|
+
repo e support --markdown --redact
|
|
116
|
+
repo cfg i
|
|
117
|
+
```
|
|
118
|
+
|
|
119
|
+
继续看:[命令别名](./aliases.md)。
|
|
@@ -0,0 +1,156 @@
|
|
|
1
|
+
# 模板与创建
|
|
2
|
+
|
|
3
|
+
repoctl 的模板由 `@icebreakers/monorepo-templates` 维护。CLI、脚手架和文档都复用同一份模板元数据。
|
|
4
|
+
|
|
5
|
+
## 内置模板
|
|
6
|
+
|
|
7
|
+
| Key | Category | 默认目录 | 适合场景 |
|
|
8
|
+
| ------------- | -------- | ------------------ | --------------------------- |
|
|
9
|
+
| `tsdown` | library | `packages/tsdown` | TypeScript 库包 |
|
|
10
|
+
| `vue-lib` | library | `packages/vue-lib` | Vue 3 组件库 |
|
|
11
|
+
| `vue-hono` | app | `apps/client` | Vue 3 + Hono 前后端一体应用 |
|
|
12
|
+
| `hono-server` | service | `apps/server` | Hono API 服务 |
|
|
13
|
+
| `vitepress` | docs | `apps/website` | VitePress 文档站 |
|
|
14
|
+
| `cli` | tool | `apps/cli` | TypeScript 命令行工具 |
|
|
15
|
+
|
|
16
|
+
## 查看模板
|
|
17
|
+
|
|
18
|
+
```bash
|
|
19
|
+
repo templates
|
|
20
|
+
repo templates tsdown
|
|
21
|
+
repo templates --category library
|
|
22
|
+
repo templates --json
|
|
23
|
+
repo templates --markdown --out docs/templates.md
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
## 创建模板
|
|
27
|
+
|
|
28
|
+
```bash
|
|
29
|
+
repo new sdk --template tsdown
|
|
30
|
+
repo new ui --template vue-lib
|
|
31
|
+
repo new api --template hono-server
|
|
32
|
+
repo new website --template vitepress
|
|
33
|
+
repo new toolbox --template cli
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
普通名字会自动放到模板约定的目录里,例如库包进入 `packages/`,应用进入 `apps/`。如果你传入带 `/` 的路径,例如 `packages/shared-utils`,repoctl 会尊重这个路径。
|
|
37
|
+
|
|
38
|
+
## 按目标选择模板
|
|
39
|
+
|
|
40
|
+
### 要发布 npm 库
|
|
41
|
+
|
|
42
|
+
```bash
|
|
43
|
+
repo new sdk --template tsdown
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
生成后先检查:
|
|
47
|
+
|
|
48
|
+
- `package.json` 的 `name`、`exports`、`types`。
|
|
49
|
+
- `tsdown.config.ts` 是否符合产物格式。
|
|
50
|
+
- 是否需要补 `tsd` 类型测试。
|
|
51
|
+
|
|
52
|
+
### 要沉淀 Vue 组件
|
|
53
|
+
|
|
54
|
+
```bash
|
|
55
|
+
repo new ui --template vue-lib
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
生成后先检查:
|
|
59
|
+
|
|
60
|
+
- 组件入口是否只导出稳定 API。
|
|
61
|
+
- 样式是否能通过 Stylelint。
|
|
62
|
+
- 文档站或示例应用是否需要同步创建。
|
|
63
|
+
|
|
64
|
+
### 要创建应用或服务
|
|
65
|
+
|
|
66
|
+
```bash
|
|
67
|
+
repo new web --template vue-hono
|
|
68
|
+
repo new api --template hono-server
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
生成后先检查:
|
|
72
|
+
|
|
73
|
+
- 运行时环境变量和部署平台约束。
|
|
74
|
+
- `dev`、`build`、`typecheck` 脚本是否接入根任务。
|
|
75
|
+
- 是否需要在 CI 里加入 E2E 或集成测试。
|
|
76
|
+
|
|
77
|
+
### 要创建文档站
|
|
78
|
+
|
|
79
|
+
```bash
|
|
80
|
+
repo new docs --template vitepress
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
生成后先检查:
|
|
84
|
+
|
|
85
|
+
- 导航和 sidebar 是否围绕产品或包名组织。
|
|
86
|
+
- 是否需要中英文 locale。
|
|
87
|
+
- 是否需要把 `repo templates --markdown` 输出写进文档。
|
|
88
|
+
|
|
89
|
+
### 要创建 CLI
|
|
90
|
+
|
|
91
|
+
```bash
|
|
92
|
+
repo new toolbox --template cli
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
生成后先检查:
|
|
96
|
+
|
|
97
|
+
- `bin` 字段是否符合最终命令名。
|
|
98
|
+
- 参数解析、退出码和帮助信息是否可测试。
|
|
99
|
+
- 是否需要把命令用法写入 README。
|
|
100
|
+
|
|
101
|
+
## 创建前预览
|
|
102
|
+
|
|
103
|
+
```bash
|
|
104
|
+
repo new website --template vitepress --dry-run
|
|
105
|
+
repo new website --template vitepress --json
|
|
106
|
+
repo new website --template vitepress --json --out plans/website.json
|
|
107
|
+
```
|
|
108
|
+
|
|
109
|
+
`--dry-run` 不写入磁盘,只展示模板、源目录、目标目录、package name 和输出文件。
|
|
110
|
+
|
|
111
|
+
`--json` 输出同一份创建计划的结构化数据,隐含 `--dry-run`。
|
|
112
|
+
|
|
113
|
+
`--out <file>` 可以把文本或 JSON 预览写入文件,也隐含 `--dry-run`。
|
|
114
|
+
|
|
115
|
+
## 固化默认模板
|
|
116
|
+
|
|
117
|
+
```ts
|
|
118
|
+
import { defineMonorepoConfig } from 'repoctl'
|
|
119
|
+
|
|
120
|
+
export default defineMonorepoConfig({
|
|
121
|
+
commands: {
|
|
122
|
+
create: {
|
|
123
|
+
defaultTemplate: 'tsdown',
|
|
124
|
+
},
|
|
125
|
+
},
|
|
126
|
+
})
|
|
127
|
+
```
|
|
128
|
+
|
|
129
|
+
之后:
|
|
130
|
+
|
|
131
|
+
```bash
|
|
132
|
+
repo new utils
|
|
133
|
+
```
|
|
134
|
+
|
|
135
|
+
会直接创建 `tsdown` 库包。
|
|
136
|
+
|
|
137
|
+
## 检查模板健康状态
|
|
138
|
+
|
|
139
|
+
```bash
|
|
140
|
+
repo templates --check
|
|
141
|
+
repo templates --check --json
|
|
142
|
+
```
|
|
143
|
+
|
|
144
|
+
模板检查会确认:
|
|
145
|
+
|
|
146
|
+
- 模板 source 和 target 没有重复。
|
|
147
|
+
- 每个模板 source 目录都存在。
|
|
148
|
+
- 每个模板根目录都有 `package.json`。
|
|
149
|
+
- 每个模板都有 category 和 description。
|
|
150
|
+
- 模板源目录里没有会被脚手架过滤掉的临时或生成文件。
|
|
151
|
+
|
|
152
|
+
## 继续阅读
|
|
153
|
+
|
|
154
|
+
- [接入已有仓库](./adopt-existing.md)
|
|
155
|
+
- [工作流与 CI](./workflows.md)
|
|
156
|
+
- [配置文件](./config.md)
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
# 排障与报告
|
|
2
|
+
|
|
3
|
+
repoctl 的排障重点不是让你猜错在哪里,而是尽量输出可以复现、可以保存、可以发给同事的报告。
|
|
4
|
+
|
|
5
|
+
## 先跑 doctor
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
repo doctor
|
|
9
|
+
repo doctor --strict
|
|
10
|
+
```
|
|
11
|
+
|
|
12
|
+
`doctor` 主要检查:
|
|
13
|
+
|
|
14
|
+
- 当前目录是不是仓库根目录。
|
|
15
|
+
- Node 版本是否满足要求。
|
|
16
|
+
- `pnpm-workspace.yaml` 是否存在。
|
|
17
|
+
- `repoctl` 是否作为 CLI 依赖安装。
|
|
18
|
+
- 根脚本是否齐全。
|
|
19
|
+
- `repoctl.config.ts` 和 `monorepo.config.ts` 是否冲突。
|
|
20
|
+
- Husky 与 lint-staged 是否都接上。
|
|
21
|
+
|
|
22
|
+
## 保存诊断报告
|
|
23
|
+
|
|
24
|
+
```bash
|
|
25
|
+
repo doctor --json --out reports/doctor.json
|
|
26
|
+
repo doctor --markdown --redact --out reports/doctor.md
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
推荐把 Markdown 报告贴到 issue 或 PR。`--redact` 会脱敏本机路径。
|
|
30
|
+
|
|
31
|
+
## 查看校验计划
|
|
32
|
+
|
|
33
|
+
```bash
|
|
34
|
+
repo check --dry-run
|
|
35
|
+
repo check --json --out reports/check-plan.json
|
|
36
|
+
repo check --markdown --redact --out reports/check-plan.md
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
当你不确定为什么某个文件触发了 workspace typecheck、pre-push 要跑哪些任务时,先看 check plan。
|
|
40
|
+
|
|
41
|
+
## 收集环境信息
|
|
42
|
+
|
|
43
|
+
```bash
|
|
44
|
+
repo env info
|
|
45
|
+
repo env support --markdown --redact --out reports/support.md
|
|
46
|
+
repo env snapshot --json --out reports/snapshot.json
|
|
47
|
+
repo env paths --markdown --redact --out reports/paths.md
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
这些命令适合排查 Node、pnpm、workspace、Git、路径和 CI 环境差异。
|
|
51
|
+
|
|
52
|
+
## 常见问题
|
|
53
|
+
|
|
54
|
+
### 当前目录不是仓库根目录
|
|
55
|
+
|
|
56
|
+
切回包含 `pnpm-workspace.yaml` 和根 `package.json` 的目录,再运行:
|
|
57
|
+
|
|
58
|
+
```bash
|
|
59
|
+
repo doctor
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
### 同时存在两个配置文件
|
|
63
|
+
|
|
64
|
+
只保留一个:
|
|
65
|
+
|
|
66
|
+
```txt
|
|
67
|
+
repoctl.config.ts
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
`monorepo.config.ts` 是兼容旧项目的文件名,新项目不建议继续使用。
|
|
71
|
+
|
|
72
|
+
### `repo new` 提示模板不存在
|
|
73
|
+
|
|
74
|
+
先查看可用模板:
|
|
75
|
+
|
|
76
|
+
```bash
|
|
77
|
+
repo templates
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
显式传入的 `--template` 会先校验。拼错时命令会失败并提示相近 key,不会静默回退。
|
|
81
|
+
|
|
82
|
+
### 自动化里不希望出现交互
|
|
83
|
+
|
|
84
|
+
使用非交互参数:
|
|
85
|
+
|
|
86
|
+
```bash
|
|
87
|
+
repo setup --yes
|
|
88
|
+
repo upgrade --no-overwrite
|
|
89
|
+
repo check --json --out reports/check-plan.json
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
非 TTY 环境下,repoctl 不会弹出交互选择框。
|
|
93
|
+
|
|
94
|
+
## 继续阅读
|
|
95
|
+
|
|
96
|
+
- [工作流与 CI](./workflows.md)
|
|
97
|
+
- [命令速查](./commands.md)
|
|
98
|
+
- [命令别名](./aliases.md)
|