@icebreakers/monorepo-templates 1.0.15 → 1.2.0
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/README.md +12 -8
- package/README.zh-CN.md +16 -0
- package/assets/.changeset/ledger.yaml +51 -0
- package/assets/.github/ISSUE_TEMPLATE/config.yml +1 -1
- package/assets/.github/workflows/release.yml +22 -97
- package/assets/AGENTS.md +5 -4
- package/assets/CONTRIBUTING.md +27 -2
- package/assets/SECURITY.md +12 -14
- package/assets/package.json +18 -10
- package/assets/pnpm-workspace.yaml +8 -0
- package/package.json +6 -4
- package/templates/cli/package.json +11 -4
- package/templates/client/package.json +22 -6
- package/templates/server/package.json +14 -7
- package/templates/server/vitest.config.ts +1 -4
- package/templates/tsdown/package.json +11 -4
- package/templates/tsdown/vitest.config.ts +1 -4
- package/templates/vitepress/.vitepress/config.ts +146 -165
- package/templates/vitepress/ai/index.md +12 -23
- package/templates/vitepress/ai/llms-txt.md +13 -31
- package/templates/vitepress/getting-started.md +3 -32
- package/templates/vitepress/index.md +27 -30
- package/templates/vitepress/knowledge/index.md +17 -41
- package/templates/vitepress/monorepo/commands.md +13 -18
- package/templates/vitepress/monorepo/index.md +22 -100
- package/templates/vitepress/monorepo/manage.md +15 -227
- package/templates/vitepress/monorepo/publish.md +17 -245
- package/templates/vitepress/monorepo/templates.md +10 -17
- package/templates/vitepress/monorepo/troubleshooting.md +13 -16
- package/templates/vitepress/package.json +11 -5
- package/templates/vitepress/public/_redirects +3 -0
- package/templates/vitepress/repoctl/adopt-existing.md +51 -53
- package/templates/vitepress/repoctl/aliases.md +18 -18
- package/templates/vitepress/repoctl/checks.md +21 -68
- package/templates/vitepress/repoctl/commands.md +16 -64
- package/templates/vitepress/repoctl/config.md +14 -35
- package/templates/vitepress/repoctl/doctor.md +20 -60
- package/templates/vitepress/repoctl/execution-model.md +16 -69
- package/templates/vitepress/repoctl/getting-started.md +34 -40
- package/templates/vitepress/repoctl/index.md +33 -61
- package/templates/vitepress/repoctl/reports.md +20 -74
- package/templates/vitepress/repoctl/scenarios.md +26 -28
- package/templates/vitepress/repoctl/template-assets.md +19 -88
- package/templates/vitepress/repoctl/templates.md +50 -81
- package/templates/vitepress/repoctl/troubleshooting.md +32 -46
- package/templates/vitepress/repoctl/workflows.md +38 -67
- package/templates/vitepress/thinking.md +4 -85
- package/templates/vitepress/tools/changeset.md +12 -85
- package/templates/vitepress/tools/husky.md +6 -124
- package/templates/vitepress/tools/index.md +13 -32
- package/templates/vitepress/tools/lint-staged.md +5 -96
- package/templates/vitepress/tools/llms-txt.md +4 -6
- package/templates/vitepress/tools/pnpm.md +7 -119
- package/templates/vitepress/tools/renovate.md +3 -87
- package/templates/vitepress/tools/turborepo.md +5 -157
- package/templates/vitepress/why/how-to-reuse-js-code.md +6 -247
- package/templates/vitepress/why/index.md +14 -1
- package/templates/vitepress/why/js-cjs-mjs.md +9 -96
- package/templates/vitepress/why/js-keywords.md +4 -129
- package/templates/vitepress/why/modern/bundlers.md +3 -50
- package/templates/vitepress/why/modern/dts.md +4 -90
- package/templates/vitepress/why/modern/esm-vs-cjs.md +4 -81
- package/templates/vitepress/why/modern/index.md +10 -51
- package/templates/vitepress/why/modern/package-entry-points.md +6 -117
- package/templates/vitepress/why/modern/typescript.md +4 -152
- package/templates/vitepress/why/publish-basic-npm-package.md +17 -144
- package/templates/vitepress/why/what-is-npm-package.md +4 -159
- package/templates/vitepress/zh/ai/index.md +33 -0
- package/templates/vitepress/zh/ai/llms-txt.md +42 -0
- package/templates/vitepress/zh/getting-started.md +40 -0
- package/templates/vitepress/zh/index.md +66 -0
- package/templates/vitepress/zh/knowledge/index.md +50 -0
- package/templates/vitepress/zh/monorepo/commands.md +21 -0
- package/templates/vitepress/zh/monorepo/index.md +115 -0
- package/templates/vitepress/zh/monorepo/manage.md +243 -0
- package/templates/vitepress/zh/monorepo/publish.md +87 -0
- package/templates/vitepress/zh/monorepo/templates.md +21 -0
- package/templates/vitepress/zh/monorepo/troubleshooting.md +20 -0
- package/templates/vitepress/zh/repoctl/adopt-existing.md +135 -0
- package/templates/vitepress/{en → zh}/repoctl/aliases.md +18 -18
- package/templates/vitepress/zh/repoctl/checks.md +86 -0
- package/templates/vitepress/zh/repoctl/commands.md +168 -0
- package/templates/vitepress/zh/repoctl/config.md +90 -0
- package/templates/vitepress/zh/repoctl/doctor.md +86 -0
- package/templates/vitepress/zh/repoctl/execution-model.md +81 -0
- package/templates/vitepress/zh/repoctl/getting-started.md +122 -0
- package/templates/vitepress/zh/repoctl/index.md +102 -0
- package/templates/vitepress/zh/repoctl/reports.md +94 -0
- package/templates/vitepress/{en → zh}/repoctl/scenarios.md +28 -26
- package/templates/vitepress/zh/repoctl/template-assets.md +116 -0
- package/templates/vitepress/zh/repoctl/templates.md +159 -0
- package/templates/vitepress/zh/repoctl/troubleshooting.md +110 -0
- package/templates/vitepress/zh/repoctl/workflows.md +118 -0
- package/templates/vitepress/zh/thinking.md +88 -0
- package/templates/vitepress/zh/tools/changeset.md +75 -0
- package/templates/vitepress/zh/tools/husky.md +130 -0
- package/templates/vitepress/zh/tools/index.md +38 -0
- package/templates/vitepress/zh/tools/lint-staged.md +103 -0
- package/templates/vitepress/zh/tools/llms-txt.md +9 -0
- package/templates/vitepress/zh/tools/pnpm.md +127 -0
- package/templates/vitepress/zh/tools/renovate.md +91 -0
- package/templates/vitepress/zh/tools/turborepo.md +166 -0
- package/templates/vitepress/zh/why/assets/npm-dt.svg +15 -0
- package/templates/vitepress/zh/why/assets/npm-ts.svg +19 -0
- package/templates/vitepress/zh/why/examples/0.npm-basic-package/index.js +10 -0
- package/templates/vitepress/zh/why/examples/0.npm-basic-package/package.json +11 -0
- package/templates/vitepress/zh/why/examples/1.npm-basic-package/index.cjs +12 -0
- package/templates/vitepress/zh/why/examples/1.npm-basic-package/index.d.ts +1 -0
- package/templates/vitepress/zh/why/examples/1.npm-basic-package/index.js +8 -0
- package/templates/vitepress/zh/why/examples/1.npm-basic-package/package.json +19 -0
- package/templates/vitepress/zh/why/examples/2.npm-basic-package/README.md +1 -0
- package/templates/vitepress/zh/why/examples/2.npm-basic-package/package-lock.json +30 -0
- package/templates/vitepress/zh/why/examples/2.npm-basic-package/package.json +35 -0
- package/templates/vitepress/zh/why/examples/2.npm-basic-package/rename-ext.js +24 -0
- package/templates/vitepress/zh/why/examples/2.npm-basic-package/src/index.ts +8 -0
- package/templates/vitepress/zh/why/examples/2.npm-basic-package/tsconfig.cjs.json +8 -0
- package/templates/vitepress/zh/why/examples/2.npm-basic-package/tsconfig.esm.json +7 -0
- package/templates/vitepress/zh/why/examples/2.npm-basic-package/tsconfig.json +18 -0
- package/templates/vitepress/zh/why/examples/3.npm-basic-package/README.md +1 -0
- package/templates/vitepress/zh/why/examples/3.npm-basic-package/package-lock.json +1496 -0
- package/templates/vitepress/zh/why/examples/3.npm-basic-package/package.json +31 -0
- package/templates/vitepress/zh/why/examples/3.npm-basic-package/src/index.ts +8 -0
- package/templates/vitepress/zh/why/examples/3.npm-basic-package/tsconfig.json +16 -0
- package/templates/vitepress/zh/why/examples/3.npm-basic-package/tsdown.config.ts +16 -0
- package/templates/vitepress/zh/why/examples/usage-cjs/cjs.cjs +4 -0
- package/templates/vitepress/zh/why/examples/usage-cjs/esm.mjs +4 -0
- package/templates/vitepress/zh/why/examples/usage-cjs/index.js +8 -0
- package/templates/vitepress/zh/why/examples/usage-cjs/package-lock.json +36 -0
- package/templates/vitepress/zh/why/examples/usage-cjs/package.json +20 -0
- package/templates/vitepress/zh/why/examples/usage-esm/cjs.cjs +4 -0
- package/templates/vitepress/zh/why/examples/usage-esm/createRequire.js +7 -0
- package/templates/vitepress/zh/why/examples/usage-esm/esm.mjs +4 -0
- package/templates/vitepress/zh/why/examples/usage-esm/index.js +8 -0
- package/templates/vitepress/zh/why/examples/usage-esm/package-lock.json +36 -0
- package/templates/vitepress/zh/why/examples/usage-esm/package.json +21 -0
- package/templates/vitepress/zh/why/how-to-reuse-js-code.md +250 -0
- package/templates/vitepress/zh/why/index.md +1 -0
- package/templates/vitepress/zh/why/js-cjs-mjs.md +99 -0
- package/templates/vitepress/zh/why/js-keywords.md +132 -0
- package/templates/vitepress/zh/why/modern/bundlers.md +52 -0
- package/templates/vitepress/zh/why/modern/dts.md +93 -0
- package/templates/vitepress/zh/why/modern/esm-vs-cjs.md +84 -0
- package/templates/vitepress/zh/why/modern/index.md +55 -0
- package/templates/vitepress/zh/why/modern/package-entry-points.md +128 -0
- package/templates/vitepress/zh/why/modern/typescript.md +155 -0
- package/templates/vitepress/zh/why/publish-basic-npm-package.md +146 -0
- package/templates/vitepress/zh/why/what-is-npm-package.md +162 -0
- package/templates/vue-lib/package.json +12 -5
- package/templates/vue-lib/vitest.config.ts +1 -1
- package/assets/.changeset/config.json +0 -21
- package/assets/.changeset/publish-versioned-packages.md +0 -5
- package/templates/vitepress/en/index.md +0 -63
- package/templates/vitepress/en/knowledge/monorepo.md +0 -37
- package/templates/vitepress/en/repoctl/adopt-existing.md +0 -133
- package/templates/vitepress/en/repoctl/commands.md +0 -120
- package/templates/vitepress/en/repoctl/config.md +0 -69
- package/templates/vitepress/en/repoctl/getting-started.md +0 -116
- package/templates/vitepress/en/repoctl/index.md +0 -74
- package/templates/vitepress/en/repoctl/templates.md +0 -128
- package/templates/vitepress/en/repoctl/troubleshooting.md +0 -96
- package/templates/vitepress/en/repoctl/workflows.md +0 -89
|
@@ -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
|
+
如果你使用 `create-repoctl` 创建新仓库,依赖和根脚本通常已经准备好了,可以直接从 `pnpm install` 开始。
|
|
24
|
+
|
|
25
|
+
## 初始化仓库默认值
|
|
26
|
+
|
|
27
|
+
```bash
|
|
28
|
+
pnpm install
|
|
29
|
+
pnpm exec repo init
|
|
30
|
+
pnpm exec repo doctor
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
这三步分别解决:
|
|
34
|
+
|
|
35
|
+
| 命令 | 作用 |
|
|
36
|
+
| -------------- | --------------------------------------------------- |
|
|
37
|
+
| `pnpm install` | 安装 workspace 依赖并创建本地链接 |
|
|
38
|
+
| `repo init` | 补齐推荐根脚本、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 init` 或模板生成补齐了根脚本,日常可以写得更短:
|
|
69
|
+
|
|
70
|
+
```bash
|
|
71
|
+
pnpm run repo:init
|
|
72
|
+
pnpm run repo:doctor -- --json
|
|
73
|
+
pnpm run repo:new -- sdk --template tsdown
|
|
74
|
+
pnpm run repo:check
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
对应关系:
|
|
78
|
+
|
|
79
|
+
| 根脚本 | 等价命令 |
|
|
80
|
+
| ------------------------------ | ---------------------------- |
|
|
81
|
+
| `pnpm run repo:init` | `pnpm exec repo init` |
|
|
82
|
+
| `pnpm run repo:doctor -- args` | `pnpm exec repo doctor args` |
|
|
83
|
+
| `pnpm run repo:new -- args` | `pnpm exec repo new args` |
|
|
84
|
+
| `pnpm run repo: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 run repo: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,102 @@
|
|
|
1
|
+
# repoctl 概览
|
|
2
|
+
|
|
3
|
+
`repoctl` 是面向 pnpm 与 Turborepo monorepo 的任务型 CLI。默认命令是 `repo`,目标是把初始化、诊断、创建、校验、升级和发布收敛到一组稳定入口里。
|
|
4
|
+
|
|
5
|
+
它不替代 pnpm、Turbo 或 pnpm versioning,而是把这些工具在 monorepo 里的常见动作串起来。
|
|
6
|
+
|
|
7
|
+
## 什么时候使用 repoctl
|
|
8
|
+
|
|
9
|
+
| 场景 | 推荐入口 |
|
|
10
|
+
| ---------------------------------------- | ------------------------ |
|
|
11
|
+
| 给已有 pnpm workspace 补齐标准脚本和配置 | `pnpm exec repo init` |
|
|
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. 生成仓库里的 repo:\* 根脚本
|
|
21
|
+
|
|
22
|
+
```bash
|
|
23
|
+
pnpm run repo:init
|
|
24
|
+
pnpm run repo:doctor
|
|
25
|
+
pnpm run repo:new
|
|
26
|
+
pnpm run repo:check
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
这是给日常开发和团队文档使用的入口。短、稳定、不需要先解释 CLI 包名,也不会和 pnpm 内置命令冲突。
|
|
30
|
+
|
|
31
|
+
### 2. 明确调用 repo CLI
|
|
32
|
+
|
|
33
|
+
```bash
|
|
34
|
+
pnpm exec repo init
|
|
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
|
+
## repoctl 管什么
|
|
55
|
+
|
|
56
|
+
repoctl 把 monorepo 里最容易分散的动作收敛为五条主线:
|
|
57
|
+
|
|
58
|
+
| 主线 | 代表命令 | 解决的问题 |
|
|
59
|
+
| ------ | ----------------------------- | --------------------------------------------------------- |
|
|
60
|
+
| 初始化 | `repo init` / `repo upgrade` | 生成或同步 workspace、根脚本、Husky、lint-staged 等资产 |
|
|
61
|
+
| 诊断 | `repo doctor` | 判断仓库根目录、运行时、脚本、配置和提交链路是否就绪 |
|
|
62
|
+
| 创建 | `repo templates` / `repo new` | 使用内置模板生成库、应用、服务、文档站和 CLI |
|
|
63
|
+
| 校验 | `repo check` / `repo verify` | 统一 pre-commit、staged typecheck、pre-push 和 commit-msg |
|
|
64
|
+
| 报告 | `repo env support` | 输出可保存、可脱敏、可给 CI 和协作者读取的上下文 |
|
|
65
|
+
|
|
66
|
+
这几条主线都支持非交互参数。需要自动化时,优先使用 `--json`、`--markdown`、`--out <file>`、`--redact` 和 `--dry-run` 组合。
|
|
67
|
+
|
|
68
|
+
## 新人和维护者的边界
|
|
69
|
+
|
|
70
|
+
| 角色 | 推荐只记住 | 需要深入时再看 |
|
|
71
|
+
| ---------- | ------------------------------------------------------------------ | ----------------------------------------------------------- |
|
|
72
|
+
| 新成员 | `pnpm run repo:doctor`、`pnpm run repo:new`、`pnpm run repo:check` | [按场景选命令](./scenarios.md) |
|
|
73
|
+
| 包维护者 | `repo templates`、`repo new --template`、`repo check --full` | [模板资产治理](./template-assets.md) |
|
|
74
|
+
| CI 维护者 | `repo doctor --strict`、`repo check --full`、`repo env support` | [报告与自动化输出](./reports.md) |
|
|
75
|
+
| 平台维护者 | `repo init`、`repo upgrade`、`repo config inspect` | [执行模型](./execution-model.md) 和 [配置文件](./config.md) |
|
|
76
|
+
|
|
77
|
+
## 命令入口
|
|
78
|
+
|
|
79
|
+
`repoctl` 包提供多个 bin,例如:
|
|
80
|
+
|
|
81
|
+
```bash
|
|
82
|
+
pnpm exec repoctl doctor
|
|
83
|
+
pnpm exec repoctl new
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
文档统一推荐 `repo`,是为了减少新人需要记住的名字。底层实现来自同一套 CLI。
|
|
87
|
+
|
|
88
|
+
## 下一步
|
|
89
|
+
|
|
90
|
+
- 第一次接入:[快速开始](./getting-started.md)
|
|
91
|
+
- 不知道用哪个命令:[按场景选命令](./scenarios.md)
|
|
92
|
+
- 理解 CLI 怎么执行:[执行模型](./execution-model.md)
|
|
93
|
+
- 查命令参数:[命令速查](./commands.md)
|
|
94
|
+
- 理解本地校验:[校验链路](./checks.md)
|
|
95
|
+
- 看 doctor 具体检查项:[doctor 诊断](./doctor.md)
|
|
96
|
+
- 固化团队默认值:[配置文件](./config.md)
|
|
97
|
+
- 看可创建的模板:[模板与创建](./templates.md)
|
|
98
|
+
- 治理模板资产:[模板资产治理](./template-assets.md)
|
|
99
|
+
- 接入 CI 和本地流程:[工作流与 CI](./workflows.md)
|
|
100
|
+
- 生成机器可读报告:[报告与自动化输出](./reports.md)
|
|
101
|
+
- 排查常见问题:[排障与报告](./troubleshooting.md)
|
|
102
|
+
- 熟悉短命令:[命令别名](./aliases.md)
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: 说明 repoctl 的 JSON、Markdown、out、redact、env info、env snapshot 和 env support 报告能力。
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
# 报告与自动化输出
|
|
6
|
+
|
|
7
|
+
repoctl 的报告能力用于把本地上下文变成可保存、可脱敏、可给脚本读取的文件。它适合 CI artifact、issue 模板、编辑器集成和跨机器排障。
|
|
8
|
+
|
|
9
|
+
## 1. 通用输出参数
|
|
10
|
+
|
|
11
|
+
| 参数 | 支持命令示例 | 作用 |
|
|
12
|
+
| -------------- | --------------------------------------- | ------------------------------ |
|
|
13
|
+
| `--json` | `doctor`、`check`、`templates`、`env` | 输出结构化数据 |
|
|
14
|
+
| `--markdown` | `doctor`、`check`、`templates`、`env` | 输出便于阅读和粘贴的报告 |
|
|
15
|
+
| `--out <file>` | 多数报告命令 | 把输出写入文件 |
|
|
16
|
+
| `--redact` | `doctor`、`check`、`env` | 脱敏本机路径 |
|
|
17
|
+
| `--strict` | `doctor`、`env snapshot`、`env support` | 有 fail 或 warn 时返回失败状态 |
|
|
18
|
+
|
|
19
|
+
## 2. env 子命令
|
|
20
|
+
|
|
21
|
+
| 命令 | 内容 | 适合用途 |
|
|
22
|
+
| ------------------- | -------------------------------------------- | ---------------- |
|
|
23
|
+
| `repo env info` | cwd、workspace、Node、pnpm、包数量等环境摘要 | 快速确认环境 |
|
|
24
|
+
| `repo env paths` | 关键路径和建议报告路径 | 统一报告落盘位置 |
|
|
25
|
+
| `repo env snapshot` | 环境、doctor 和 check plan | CI 快照 |
|
|
26
|
+
| `repo env support` | 环境、路径、配置、doctor 和 check plan | 完整排障包 |
|
|
27
|
+
| `repo env mirror` | VS Code binary mirror 设置 | 国内网络环境优化 |
|
|
28
|
+
|
|
29
|
+
常用组合:
|
|
30
|
+
|
|
31
|
+
```bash
|
|
32
|
+
repo env info --json --out reports/env.json
|
|
33
|
+
repo env snapshot --markdown --redact --out reports/snapshot.md
|
|
34
|
+
repo env support --markdown --redact --out reports/support.md
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
## 3. CI artifact 示例
|
|
38
|
+
|
|
39
|
+
```bash
|
|
40
|
+
repo doctor --json --out reports/doctor.json
|
|
41
|
+
repo check --full --json --out reports/check-plan.json
|
|
42
|
+
repo env support --markdown --redact --out reports/support.md
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
建议把 `reports/` 上传为 artifact。这样 CI 失败时,不需要重新询问维护者使用了什么 Node、pnpm、workspace 根目录和校验计划。
|
|
46
|
+
|
|
47
|
+
## 4. issue 排障模板
|
|
48
|
+
|
|
49
|
+
当你需要把问题交给同事或维护者时,可以先生成 Markdown:
|
|
50
|
+
|
|
51
|
+
```bash
|
|
52
|
+
repo env support --markdown --redact --out reports/support.md
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
然后在 issue 里附上:
|
|
56
|
+
|
|
57
|
+
| 内容 | 来源 |
|
|
58
|
+
| ------------- | ----------------- |
|
|
59
|
+
| 环境摘要 | `env info` |
|
|
60
|
+
| 配置命中情况 | `config inspect` |
|
|
61
|
+
| doctor 失败项 | `doctor` |
|
|
62
|
+
| check 计划 | `check --dry-run` |
|
|
63
|
+
| 推荐报告路径 | `env paths` |
|
|
64
|
+
|
|
65
|
+
## 5. 什么时候使用 JSON
|
|
66
|
+
|
|
67
|
+
JSON 适合机器判断,不适合人工长时间阅读:
|
|
68
|
+
|
|
69
|
+
```bash
|
|
70
|
+
repo doctor --json --out reports/doctor.json
|
|
71
|
+
repo templates --check --json --out reports/templates.json
|
|
72
|
+
repo new docs --template vitepress --json --out plans/docs.json
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
常见消费方式:
|
|
76
|
+
|
|
77
|
+
| 目标 | 使用方式 |
|
|
78
|
+
| ------------------- | ------------------------------------ |
|
|
79
|
+
| CI 判断是否有阻塞项 | 读取 `doctor.summary.fail` |
|
|
80
|
+
| 编辑器展示模板列表 | 读取 `repo templates --json` |
|
|
81
|
+
| 预览创建结果 | 读取 `repo new --json` |
|
|
82
|
+
| 审计模板健康状态 | 读取 `repo templates --check --json` |
|
|
83
|
+
|
|
84
|
+
## 6. 什么时候使用 Markdown
|
|
85
|
+
|
|
86
|
+
Markdown 适合给人看,尤其适合 PR、issue 和协作文档:
|
|
87
|
+
|
|
88
|
+
```bash
|
|
89
|
+
repo doctor --markdown --redact --out reports/doctor.md
|
|
90
|
+
repo check --markdown --redact --out reports/check-plan.md
|
|
91
|
+
repo templates --markdown --out docs/templates.md
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
如果报告要离开本机,默认加 `--redact`。
|
|
@@ -1,15 +1,15 @@
|
|
|
1
|
-
#
|
|
1
|
+
# 按场景选命令
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
如果你不确定该用哪个 repoctl 命令,先从这一页开始。
|
|
4
4
|
|
|
5
|
-
##
|
|
5
|
+
## 我刚拿到一个仓库
|
|
6
6
|
|
|
7
7
|
```bash
|
|
8
8
|
pnpm install
|
|
9
9
|
pnpm run repo:doctor
|
|
10
10
|
```
|
|
11
11
|
|
|
12
|
-
|
|
12
|
+
如果 `repo:*` 根脚本还不存在:
|
|
13
13
|
|
|
14
14
|
```bash
|
|
15
15
|
pnpm add -D repoctl
|
|
@@ -17,9 +17,9 @@ pnpm exec repo init --yes
|
|
|
17
17
|
pnpm exec repo doctor
|
|
18
18
|
```
|
|
19
19
|
|
|
20
|
-
|
|
20
|
+
继续看:[快速开始](./getting-started.md)。
|
|
21
21
|
|
|
22
|
-
##
|
|
22
|
+
## 我要把 repoctl 接入旧仓库
|
|
23
23
|
|
|
24
24
|
```bash
|
|
25
25
|
pnpm add -D repoctl
|
|
@@ -29,9 +29,9 @@ pnpm exec repo upgrade --no-overwrite
|
|
|
29
29
|
pnpm exec repo doctor --markdown --redact --out reports/doctor-after.md
|
|
30
30
|
```
|
|
31
31
|
|
|
32
|
-
|
|
32
|
+
继续看:[接入已有仓库](./adopt-existing.md)。
|
|
33
33
|
|
|
34
|
-
##
|
|
34
|
+
## 我要创建新包或应用
|
|
35
35
|
|
|
36
36
|
```bash
|
|
37
37
|
pnpm exec repo templates
|
|
@@ -39,15 +39,15 @@ pnpm exec repo new sdk --template tsdown
|
|
|
39
39
|
pnpm exec repo new docs --template vitepress --dry-run
|
|
40
40
|
```
|
|
41
41
|
|
|
42
|
-
|
|
42
|
+
如果只是日常开发,根脚本也可以:
|
|
43
43
|
|
|
44
44
|
```bash
|
|
45
45
|
pnpm run repo:new -- sdk --template tsdown
|
|
46
46
|
```
|
|
47
47
|
|
|
48
|
-
|
|
48
|
+
继续看:[模板与创建](./templates.md)。
|
|
49
49
|
|
|
50
|
-
##
|
|
50
|
+
## 我要提交前自查
|
|
51
51
|
|
|
52
52
|
```bash
|
|
53
53
|
pnpm run repo:check
|
|
@@ -55,16 +55,16 @@ pnpm exec repo check --dry-run
|
|
|
55
55
|
pnpm exec repo check --full
|
|
56
56
|
```
|
|
57
57
|
|
|
58
|
-
|
|
58
|
+
如果你想保存计划:
|
|
59
59
|
|
|
60
60
|
```bash
|
|
61
61
|
pnpm exec repo check --json --out reports/check-plan.json
|
|
62
62
|
pnpm exec repo check --markdown --redact --out reports/check-plan.md
|
|
63
63
|
```
|
|
64
64
|
|
|
65
|
-
|
|
65
|
+
继续看:[工作流与 CI](./workflows.md)。
|
|
66
66
|
|
|
67
|
-
##
|
|
67
|
+
## 我要调试 CI 或同事机器问题
|
|
68
68
|
|
|
69
69
|
```bash
|
|
70
70
|
pnpm exec repo doctor --markdown --redact --out reports/doctor.md
|
|
@@ -72,9 +72,9 @@ pnpm exec repo env support --markdown --redact --out reports/support.md
|
|
|
72
72
|
pnpm exec repo env snapshot --json --out reports/snapshot.json
|
|
73
73
|
```
|
|
74
74
|
|
|
75
|
-
|
|
75
|
+
继续看:[排障与报告](./troubleshooting.md)。
|
|
76
76
|
|
|
77
|
-
##
|
|
77
|
+
## 我要同步模板标准资产
|
|
78
78
|
|
|
79
79
|
```bash
|
|
80
80
|
pnpm exec repo upgrade --no-overwrite
|
|
@@ -82,13 +82,15 @@ pnpm exec repo upgrade --yes
|
|
|
82
82
|
pnpm exec repo upgrade --core
|
|
83
83
|
```
|
|
84
84
|
|
|
85
|
-
|
|
86
|
-
| ------------------------------------------ | ----------------------------- |
|
|
87
|
-
| First adoption pass, preserve local config | `repo upgrade --no-overwrite` |
|
|
88
|
-
| Explicitly overwrite managed assets | `repo upgrade --yes` |
|
|
89
|
-
| Sync only core config | `repo upgrade --core` |
|
|
85
|
+
选择建议:
|
|
90
86
|
|
|
91
|
-
|
|
87
|
+
| 目标 | 命令 |
|
|
88
|
+
| ------------------------ | ----------------------------- |
|
|
89
|
+
| 第一次接入,保留已有配置 | `repo upgrade --no-overwrite` |
|
|
90
|
+
| 明确要覆盖标准资产 | `repo upgrade --yes` |
|
|
91
|
+
| 只同步核心配置 | `repo upgrade --core` |
|
|
92
|
+
|
|
93
|
+
## 我要看 workspace 结构
|
|
92
94
|
|
|
93
95
|
```bash
|
|
94
96
|
pnpm exec repo ws ls
|
|
@@ -96,16 +98,16 @@ pnpm exec repo ws ls --json --out reports/workspaces.json
|
|
|
96
98
|
pnpm exec repo ws ls --markdown --redact --out reports/workspaces.md
|
|
97
99
|
```
|
|
98
100
|
|
|
99
|
-
##
|
|
101
|
+
## 我要看配置是否生效
|
|
100
102
|
|
|
101
103
|
```bash
|
|
102
104
|
pnpm exec repo config inspect
|
|
103
105
|
pnpm exec repo cfg i --json --out reports/config.json
|
|
104
106
|
```
|
|
105
107
|
|
|
106
|
-
|
|
108
|
+
继续看:[配置文件](./config.md)。
|
|
107
109
|
|
|
108
|
-
##
|
|
110
|
+
## 我要写更短的命令
|
|
109
111
|
|
|
110
112
|
```bash
|
|
111
113
|
repo tpl
|
|
@@ -114,4 +116,4 @@ repo e support --markdown --redact
|
|
|
114
116
|
repo cfg i
|
|
115
117
|
```
|
|
116
118
|
|
|
117
|
-
|
|
119
|
+
继续看:[命令别名](./aliases.md)。
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: 说明 repoctl 内置模板、templateMap、模板健康检查、创建计划和模板资产维护方式。
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
# repoctl 模板资产治理
|
|
6
|
+
|
|
7
|
+
repoctl 的模板能力不只是复制目录。它会把模板元数据、默认生成目录、创建计划、健康检查和配置覆盖串起来。
|
|
8
|
+
|
|
9
|
+
## 1. 内置模板映射
|
|
10
|
+
|
|
11
|
+
| key | source | 默认 target | 类型 |
|
|
12
|
+
| ------------- | --------------------- | ------------------ | --------------------- |
|
|
13
|
+
| `tsdown` | `templates/tsdown` | `packages/tsdown` | TypeScript library |
|
|
14
|
+
| `vue-lib` | `templates/vue-lib` | `packages/vue-lib` | Vue component library |
|
|
15
|
+
| `hono-server` | `templates/server` | `apps/server` | Hono service |
|
|
16
|
+
| `vue-hono` | `templates/client` | `apps/client` | Vue + Hono app |
|
|
17
|
+
| `vitepress` | `templates/vitepress` | `apps/website` | docs site |
|
|
18
|
+
| `cli` | `templates/cli` | `apps/cli` | command line tool |
|
|
19
|
+
|
|
20
|
+
查看实际可用模板:
|
|
21
|
+
|
|
22
|
+
```bash
|
|
23
|
+
repo templates
|
|
24
|
+
repo templates --json
|
|
25
|
+
repo templates --markdown --out docs/templates.md
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
## 2. 创建计划
|
|
29
|
+
|
|
30
|
+
`repo new` 会先解析创建计划,再决定是否写入文件。计划包含:
|
|
31
|
+
|
|
32
|
+
| 字段 | 含义 |
|
|
33
|
+
| ------------------- | ------------------------------------------------ |
|
|
34
|
+
| `requestedTemplate` | 用户请求的模板 key |
|
|
35
|
+
| `template` | 实际使用的模板 key |
|
|
36
|
+
| `sourceDir` | 模板源目录 |
|
|
37
|
+
| `targetDir` | 输出目录 |
|
|
38
|
+
| `targetExists` | 目标目录是否已存在 |
|
|
39
|
+
| `packageName` | 写入 package.json 的包名 |
|
|
40
|
+
| `renameJson` | 是否把 `package.json` 输出为 `package.mock.json` |
|
|
41
|
+
|
|
42
|
+
预览创建:
|
|
43
|
+
|
|
44
|
+
```bash
|
|
45
|
+
repo new docs --template vitepress --dry-run
|
|
46
|
+
repo new docs --template vitepress --json --out plans/docs.json
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
`--json` 和 `--out` 都隐含 `--dry-run`,不会写入文件。
|
|
50
|
+
|
|
51
|
+
## 3. 模板选择和报错
|
|
52
|
+
|
|
53
|
+
显式传入 `--template` 时,repoctl 会先校验模板 key:
|
|
54
|
+
|
|
55
|
+
```bash
|
|
56
|
+
repo new sdk --template tsdown
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
如果模板 key 拼错,命令会失败并提示相近 key。它不会静默回退到默认模板,这样 CI 和脚本不会生成错误类型的项目。
|
|
60
|
+
|
|
61
|
+
## 4. 健康检查
|
|
62
|
+
|
|
63
|
+
模板资产可以通过 `repo templates --check` 检查:
|
|
64
|
+
|
|
65
|
+
```bash
|
|
66
|
+
repo templates --check
|
|
67
|
+
repo templates --check --json --out reports/templates.json
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
检查内容包括:
|
|
71
|
+
|
|
72
|
+
| 检查 | 目的 |
|
|
73
|
+
| -------------- | ------------------------------------ |
|
|
74
|
+
| source 唯一性 | 避免多个模板 key 指向同一源目录 |
|
|
75
|
+
| target 唯一性 | 避免多个模板默认写到同一目标目录 |
|
|
76
|
+
| source 目录 | 确认模板目录存在 |
|
|
77
|
+
| package.json | 确认模板根目录包含包元数据 |
|
|
78
|
+
| metadata | 确认模板有 category 和 description |
|
|
79
|
+
| filtered files | 避免把临时、缓存或生成文件放入模板源 |
|
|
80
|
+
|
|
81
|
+
## 5. 自定义模板
|
|
82
|
+
|
|
83
|
+
可以在 `repoctl.config.ts` 里扩展模板映射:
|
|
84
|
+
|
|
85
|
+
```ts
|
|
86
|
+
import { defineMonorepoConfig } from 'repoctl'
|
|
87
|
+
|
|
88
|
+
export default defineMonorepoConfig({
|
|
89
|
+
commands: {
|
|
90
|
+
create: {
|
|
91
|
+
defaultTemplate: 'internal-service',
|
|
92
|
+
templateMap: {
|
|
93
|
+
'internal-service': {
|
|
94
|
+
source: 'templates/internal-service',
|
|
95
|
+
target: 'apps/internal-service',
|
|
96
|
+
},
|
|
97
|
+
},
|
|
98
|
+
},
|
|
99
|
+
},
|
|
100
|
+
})
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
自定义模板建议遵守同样的治理规则:唯一 source、唯一 target、模板根目录包含 `package.json`,并避免提交构建输出和缓存文件。
|
|
104
|
+
|
|
105
|
+
## 6. 维护流程
|
|
106
|
+
|
|
107
|
+
更新模板时建议按下面流程验证:
|
|
108
|
+
|
|
109
|
+
```txt
|
|
110
|
+
修改 templates/<name>
|
|
111
|
+
-> repo templates --check
|
|
112
|
+
-> repo new demo --template <name> --json --out plans/demo.json
|
|
113
|
+
-> 构建或测试生成后的 workspace
|
|
114
|
+
```
|
|
115
|
+
|
|
116
|
+
如果模板文件数量发生变化,维护模板快照的测试也需要同步更新。
|