@icebreakers/monorepo-templates 1.1.0 → 1.2.1
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/.github/ISSUE_TEMPLATE/config.yml +1 -1
- package/assets/.github/workflows/release.yml +5 -3
- package/assets/AGENTS.md +4 -3
- package/assets/CONTRIBUTING.md +27 -2
- package/assets/SECURITY.md +12 -14
- package/assets/package.json +13 -4
- package/assets/pnpm-workspace.yaml +2 -9
- package/dist/cli.mjs +1 -1
- package/dist/index.mjs +1 -1
- package/dist/{prepare-CNCmvco-.mjs → prepare--cxFop8c.mjs} +20 -0
- package/package.json +9 -5
- package/templates/cli/package.json +11 -4
- package/templates/client/package.json +17 -1
- package/templates/server/package.json +11 -4
- package/templates/tsdown/package.json +11 -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 +15 -70
- package/templates/vitepress/monorepo/templates.md +10 -17
- package/templates/vitepress/monorepo/troubleshooting.md +13 -16
- package/templates/vitepress/package.json +10 -4
- 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 +9 -59
- 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/assets/.changeset/ledger.yaml +0 -26
- 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,42 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: 使用 llms.txt 为大语言模型提供更易读取的 repoctl 文档入口。
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
# AI 文档入口:llms.txt
|
|
6
|
+
|
|
7
|
+
`llms.txt` 是面向大语言模型的文档入口文件。它把站点中的关键页面整理成更适合模型读取的 Markdown 索引,便于 AI 工具在回答 repoctl、pnpm workspace、Turborepo 和模板用法相关问题时快速定位上下文。
|
|
8
|
+
|
|
9
|
+
本站通过 `vitepress-plugin-llms` 在构建阶段自动生成这些文件:
|
|
10
|
+
|
|
11
|
+
| 文件 | 用途 |
|
|
12
|
+
| ---------------- | -------------------------------- |
|
|
13
|
+
| `/llms.txt` | 文档索引,列出可供模型读取的页面 |
|
|
14
|
+
| `/llms-full.txt` | 把站点文档合并成单个文本文件 |
|
|
15
|
+
| 页面 `.md` 文件 | 保留每个页面内容的 Markdown 版本 |
|
|
16
|
+
|
|
17
|
+
## 1. 使用方式
|
|
18
|
+
|
|
19
|
+
访问 `https://repo.icebreaker.top/llms.txt` 可以获取当前文档的 LLM 索引。如果需要一次性提供完整上下文,可以使用 `https://repo.icebreaker.top/llms-full.txt`。
|
|
20
|
+
|
|
21
|
+
当你在 Cursor、Claude Code、Codex 或其他 AI 编程工具里引用 repoctl 文档时,优先提供 `llms.txt`,再按需要补充具体页面链接。
|
|
22
|
+
|
|
23
|
+
## 2. 维护约定
|
|
24
|
+
|
|
25
|
+
新增重要文档页面时,在 frontmatter 中补充 `description`。构建插件会把描述写入 `llms.txt` 的链接说明中,让模型更容易判断每个页面的用途。
|
|
26
|
+
|
|
27
|
+
```md
|
|
28
|
+
---
|
|
29
|
+
description: 说明这个页面解决的问题和适用场景。
|
|
30
|
+
---
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
## 3. 页面组织建议
|
|
34
|
+
|
|
35
|
+
AI 入口应该保持显眼,但不要替代正常文档结构:
|
|
36
|
+
|
|
37
|
+
| 页面类型 | 推荐位置 |
|
|
38
|
+
| -------------------------------------- | ------------------------------------ |
|
|
39
|
+
| repoctl 命令、校验、诊断、报告 | `/repoctl/` |
|
|
40
|
+
| monorepo 和 npm 包基础知识 | `/knowledge/`、`/monorepo/`、`/why/` |
|
|
41
|
+
| pnpm、Turborepo、versioning 等工具专题 | `/tools/` |
|
|
42
|
+
| llms.txt 和 AI 工具读取约定 | `/ai/` |
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
# 新手使用指南
|
|
2
|
+
|
|
3
|
+
这篇旧入口已经收敛到 repoctl 主线。新读者建议直接阅读:
|
|
4
|
+
|
|
5
|
+
- [repoctl 快速开始](./repoctl/getting-started.md)
|
|
6
|
+
- [repoctl 命令速查](./repoctl/commands.md)
|
|
7
|
+
- [repoctl 配置文件](./repoctl/config.md)
|
|
8
|
+
|
|
9
|
+
## 先这样用
|
|
10
|
+
|
|
11
|
+
```bash
|
|
12
|
+
pnpm add -D repoctl
|
|
13
|
+
pnpm exec repo init
|
|
14
|
+
pnpm exec repo doctor
|
|
15
|
+
pnpm exec repo new
|
|
16
|
+
pnpm exec repo check
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
模板生成仓库里可以使用更短的根脚本:
|
|
20
|
+
|
|
21
|
+
```bash
|
|
22
|
+
pnpm run repo:init
|
|
23
|
+
pnpm doctor
|
|
24
|
+
pnpm new
|
|
25
|
+
pnpm check
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
## 知识点保留
|
|
29
|
+
|
|
30
|
+
理解工具前,先理解这几个边界:
|
|
31
|
+
|
|
32
|
+
| 命令 | 解决的问题 |
|
|
33
|
+
| -------------- | ----------------------------------------------------- |
|
|
34
|
+
| `repo init` | 补齐仓库默认脚本、workspace patterns 和基础工具链入口 |
|
|
35
|
+
| `repo doctor` | 判断仓库当前是否可用,并输出可保存的诊断报告 |
|
|
36
|
+
| `repo new` | 从内置模板创建包、应用、服务、文档站或 CLI |
|
|
37
|
+
| `repo check` | 预览或执行提交前推荐校验 |
|
|
38
|
+
| `repo upgrade` | 同步模板最新标准资产 |
|
|
39
|
+
|
|
40
|
+
如果你是在学习 monorepo 的基础概念,可以继续看 [为什么往 monorepo 方向演进](./monorepo/index.md)。
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
---
|
|
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: /zh/repoctl/getting-started
|
|
15
|
+
- theme: alt
|
|
16
|
+
text: 命令速查
|
|
17
|
+
link: /zh/repoctl/commands
|
|
18
|
+
- theme: alt
|
|
19
|
+
text: AI 文档入口
|
|
20
|
+
link: /zh/ai/
|
|
21
|
+
|
|
22
|
+
features:
|
|
23
|
+
- title: 从已有仓库开始
|
|
24
|
+
details: 安装 repoctl 后运行 setup 和 doctor,先把 workspace、根脚本、配置冲突和提交链路检查清楚。
|
|
25
|
+
- title: 用模板创建包和应用
|
|
26
|
+
details: repo new 支持交互式创建、指定模板、dry-run、JSON 输出和创建计划落盘。
|
|
27
|
+
- title: 把质量门禁变成日常命令
|
|
28
|
+
details: repo check 统一预览和执行 lint、typecheck、build、test、tsd 等推荐校验。
|
|
29
|
+
- title: 给 AI 工具的文档入口
|
|
30
|
+
details: 构建时自动生成 llms.txt、llms-full.txt 和页面 Markdown,让 AI 编程工具更容易读取 repoctl 文档。
|
|
31
|
+
---
|
|
32
|
+
|
|
33
|
+
## 最短路径
|
|
34
|
+
|
|
35
|
+
```bash
|
|
36
|
+
pnpm add -D repoctl
|
|
37
|
+
pnpm exec repo init
|
|
38
|
+
pnpm exec repo doctor
|
|
39
|
+
pnpm exec repo new
|
|
40
|
+
pnpm exec repo check
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
在由 repoctl 创建或初始化的仓库里,同一套工作流会暴露成更短的根脚本:
|
|
44
|
+
|
|
45
|
+
```bash
|
|
46
|
+
pnpm run repo:init
|
|
47
|
+
pnpm run repo:doctor
|
|
48
|
+
pnpm run repo:new
|
|
49
|
+
pnpm run repo:check
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
## 你可以继续阅读
|
|
53
|
+
|
|
54
|
+
- [repoctl 概览](./repoctl/index.md)
|
|
55
|
+
- [快速开始](./repoctl/getting-started.md)
|
|
56
|
+
- [接入已有仓库](./repoctl/adopt-existing.md)
|
|
57
|
+
- [按场景选命令](./repoctl/scenarios.md)
|
|
58
|
+
- [执行模型](./repoctl/execution-model.md)
|
|
59
|
+
- [命令速查](./repoctl/commands.md)
|
|
60
|
+
- [校验链路](./repoctl/checks.md)
|
|
61
|
+
- [doctor 诊断](./repoctl/doctor.md)
|
|
62
|
+
- [配置文件](./repoctl/config.md)
|
|
63
|
+
- [模板与创建](./repoctl/templates.md)
|
|
64
|
+
- [模板资产治理](./repoctl/template-assets.md)
|
|
65
|
+
- [工作流与 CI](./repoctl/workflows.md)
|
|
66
|
+
- [报告与自动化输出](./repoctl/reports.md)
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: repoctl 文档站的知识库入口,汇总 monorepo 管理、现代 npm 包和 JavaScript 模块化基础。
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
# 知识库
|
|
6
|
+
|
|
7
|
+
知识库用于解释 repoctl 背后的工程背景。这里不放命令速查,而是回答为什么要这样组织仓库、包、构建和发布流程。
|
|
8
|
+
|
|
9
|
+
## 1. monorepo 主题
|
|
10
|
+
|
|
11
|
+
| 页面 | 适合解决的问题 |
|
|
12
|
+
| -------------------------------------------------- | ---------------------------------- |
|
|
13
|
+
| [为什么往 monorepo 方向演进](../monorepo/index.md) | 判断多包仓库是否值得合并管理 |
|
|
14
|
+
| [如何管理 monorepo](../monorepo/manage.md) | 理解 workspace、任务编排和依赖边界 |
|
|
15
|
+
| [发包与变更日志](../monorepo/publish.md) | 设计 pnpm intent、版本和发布链路 |
|
|
16
|
+
| [monorepo 命令参考](../monorepo/commands.md) | 查看通用 monorepo 操作命令 |
|
|
17
|
+
| [monorepo 模板体系](../monorepo/templates.md) | 理解模板如何减少重复初始化 |
|
|
18
|
+
| [monorepo 排障](../monorepo/troubleshooting.md) | 排查依赖、构建、类型和发布问题 |
|
|
19
|
+
|
|
20
|
+
## 2. 现代 npm 包主题
|
|
21
|
+
|
|
22
|
+
| 页面 | 适合解决的问题 |
|
|
23
|
+
| ------------------------------------------------------ | ---------------------------------- |
|
|
24
|
+
| [如何复用 js 代码](../why/how-to-reuse-js-code.md) | 从复制文件演进到发布包 |
|
|
25
|
+
| [什么是 npm 包](../why/what-is-npm-package.md) | 理解 package.json、入口和安装方式 |
|
|
26
|
+
| [如何发布 npm 包](../why/publish-basic-npm-package.md) | 走通最小 npm 发布流程 |
|
|
27
|
+
| [改进并发布现代 npm 包](../why/index.md) | 把普通包升级成更规范的现代包 |
|
|
28
|
+
| [现代包指南](../why/modern/index.md) | 汇总类型、入口、模块格式和构建工具 |
|
|
29
|
+
|
|
30
|
+
## 3. 阅读顺序
|
|
31
|
+
|
|
32
|
+
如果你第一次接触 monorepo,建议按下面顺序阅读:
|
|
33
|
+
|
|
34
|
+
```txt
|
|
35
|
+
为什么 monorepo
|
|
36
|
+
-> 如何管理 monorepo
|
|
37
|
+
-> 什么是 npm 包
|
|
38
|
+
-> 现代包指南
|
|
39
|
+
-> 发包与变更日志
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
如果你已经在维护仓库,可以直接从具体问题进入:
|
|
43
|
+
|
|
44
|
+
| 你遇到的问题 | 建议入口 |
|
|
45
|
+
| ----------------------------- | ----------------------------------------------- |
|
|
46
|
+
| workspace 包互相引用不清楚 | [如何管理 monorepo](../monorepo/manage.md) |
|
|
47
|
+
| 不确定 CJS、ESM、types 怎么配 | [现代包指南](../why/modern/index.md) |
|
|
48
|
+
| 发布后使用方拿不到类型 | [类型声明](../why/modern/dts.md) |
|
|
49
|
+
| 包入口太多、导入路径混乱 | [包入口](../why/modern/package-entry-points.md) |
|
|
50
|
+
| CI 和发版流程容易漂移 | [发包与变更日志](../monorepo/publish.md) |
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
# 命令速查
|
|
2
|
+
|
|
3
|
+
repoctl 现在是这套文档的主线。完整命令说明请阅读:
|
|
4
|
+
|
|
5
|
+
- [repoctl 命令速查](../repoctl/commands.md)
|
|
6
|
+
- [repoctl 模板与创建](../repoctl/templates.md)
|
|
7
|
+
- [repoctl 排障与报告](../repoctl/troubleshooting.md)
|
|
8
|
+
|
|
9
|
+
## monorepo 知识点:为什么要统一命令入口
|
|
10
|
+
|
|
11
|
+
monorepo 的难点通常不是“能不能跑某个工具”,而是团队成员是否能稳定地用同一套入口完成日常动作。
|
|
12
|
+
|
|
13
|
+
repoctl 把命令分成三层:
|
|
14
|
+
|
|
15
|
+
| 层级 | 示例 | 适合场景 |
|
|
16
|
+
| -------- | -------------------------------------------- | -------------------- |
|
|
17
|
+
| 根脚本 | `pnpm run repo:doctor` / `pnpm run repo:new` | 日常开发和团队教程 |
|
|
18
|
+
| 主 CLI | `pnpm exec repo doctor` | CI、脚本、排障和文档 |
|
|
19
|
+
| 分组命令 | `repo ws ls` / `repo env support` | 维护者和自动化 |
|
|
20
|
+
|
|
21
|
+
保留这个旧页面,是为了让已有链接继续可用,同时把读者导向新的 repoctl 命令文档。
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
# 为什么往 monorepo 方向演进
|
|
2
|
+
|
|
3
|
+
选择 monorepo,不是为了“更先进”,而是为了把多包协作里最常见的重复劳动砍掉。
|
|
4
|
+
|
|
5
|
+
当你的仓库里同时存在应用、类库、CLI、文档站,或者多个团队要共享同一套类型、配置、脚手架时,monorepo 的收益会很快超过它的管理成本。
|
|
6
|
+
|
|
7
|
+
## repoctl 面向的真实问题
|
|
8
|
+
|
|
9
|
+
### 1. 依赖和脚本不再分散
|
|
10
|
+
|
|
11
|
+
在 polyrepo 里,最常见的问题不是代码本身,而是:
|
|
12
|
+
|
|
13
|
+
- 每个仓库都要单独装依赖
|
|
14
|
+
- 每个仓库都维护一套 lint / typecheck / test 脚本
|
|
15
|
+
- 同样的工具链升级要重复做很多次
|
|
16
|
+
- 团队成员很难判断哪个仓库的规范才是“当前标准”
|
|
17
|
+
|
|
18
|
+
在 monorepo 里,这些东西可以收敛到一个根目录。
|
|
19
|
+
|
|
20
|
+
### 2. 跨包改动可以原子提交
|
|
21
|
+
|
|
22
|
+
如果一个接口变更同时影响:
|
|
23
|
+
|
|
24
|
+
- `packages/types`
|
|
25
|
+
- `packages/sdk`
|
|
26
|
+
- `apps/web`
|
|
27
|
+
- `apps/server`
|
|
28
|
+
|
|
29
|
+
那么在 monorepo 里,一次提交就能把它们一起改完、一起验证、一起回滚。对重构和版本审计都更友好。
|
|
30
|
+
|
|
31
|
+
### 3. 构建与测试更容易增量化
|
|
32
|
+
|
|
33
|
+
`pnpm` 负责 workspace 依赖管理,`turborepo` 负责任务编排和缓存,结果就是:
|
|
34
|
+
|
|
35
|
+
- 没改动的包不需要重复构建
|
|
36
|
+
- CI 可以按依赖图只跑受影响任务
|
|
37
|
+
- 大仓库也能保持比较稳定的反馈速度
|
|
38
|
+
|
|
39
|
+
## repoctl 的工程立场
|
|
40
|
+
|
|
41
|
+
这不是一个“什么都能配”的框架,而是一套偏实战、偏收敛的默认值:
|
|
42
|
+
|
|
43
|
+
| 维度 | 默认选择 |
|
|
44
|
+
| -------- | --------------------------------------- |
|
|
45
|
+
| 包管理 | `pnpm workspace` |
|
|
46
|
+
| 任务编排 | `turborepo` |
|
|
47
|
+
| 语言 | TypeScript 优先 |
|
|
48
|
+
| 校验链路 | ESLint + Stylelint + typecheck + Vitest |
|
|
49
|
+
| 提交规范 | Husky + lint-staged + commitlint |
|
|
50
|
+
| 发包 | pnpm versioning |
|
|
51
|
+
| 命令入口 | `repo` 为主,`repoctl` 为完整包名入口 |
|
|
52
|
+
|
|
53
|
+
这些选择的目的只有一个:减少“每个项目重新想一遍”的成本。
|
|
54
|
+
|
|
55
|
+
## 什么时候适合用 monorepo
|
|
56
|
+
|
|
57
|
+
下面这些情况,适合直接上:
|
|
58
|
+
|
|
59
|
+
- 你要同时维护多个 npm 包
|
|
60
|
+
- 你有前后端、CLI、文档站共用一套类型或工具
|
|
61
|
+
- 你希望升级脚本、工程化配置时一次同步全仓
|
|
62
|
+
- 你有持续重构、跨包联动改动的需求
|
|
63
|
+
|
|
64
|
+
下面这些情况,不一定值得上:
|
|
65
|
+
|
|
66
|
+
- 只有一个很小的应用,没有共享代码需求
|
|
67
|
+
- 团队还没有接受统一规范的准备
|
|
68
|
+
- 构建链路本身还不稳定,先统一仓库只会放大问题
|
|
69
|
+
|
|
70
|
+
## repoctl 提供的补位能力
|
|
71
|
+
|
|
72
|
+
单纯有 monorepo 还不够,真正难的是“如何让它易用”。repoctl 补充了三层能力:
|
|
73
|
+
|
|
74
|
+
### 1. 更短的日常命令
|
|
75
|
+
|
|
76
|
+
```bash
|
|
77
|
+
pnpm exec repo init
|
|
78
|
+
pnpm exec repo doctor
|
|
79
|
+
pnpm run repo:new
|
|
80
|
+
pnpm run repo:check
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
不用先背完整 CLI,先把日常路径跑顺。
|
|
84
|
+
|
|
85
|
+
### 2. `repo doctor` 这种面向新人的诊断命令
|
|
86
|
+
|
|
87
|
+
它会直接回答这些问题:
|
|
88
|
+
|
|
89
|
+
- 你是不是站在仓库根目录
|
|
90
|
+
- `pnpm-workspace.yaml` 在不在
|
|
91
|
+
- Node 版本对不对
|
|
92
|
+
- 有没有安装 CLI 依赖
|
|
93
|
+
- 根脚本齐不齐
|
|
94
|
+
- 是否仍残留已废弃的 `monorepo.config.ts`
|
|
95
|
+
- Husky / lint-staged 链路是不是半残状态
|
|
96
|
+
|
|
97
|
+
### 3. `repo upgrade` 这种面向存量仓库的同步命令
|
|
98
|
+
|
|
99
|
+
当受管默认值变化时,你不需要手抄配置,只要选择性同步标准资产。
|
|
100
|
+
|
|
101
|
+
## 实际收益通常体现在这里
|
|
102
|
+
|
|
103
|
+
| 场景 | Polyrepo 常见成本 | Monorepo 常见收益 |
|
|
104
|
+
| ------------ | ------------------ | ---------------------- |
|
|
105
|
+
| 工具链升级 | 多仓重复改配置 | 一次升级,多包受益 |
|
|
106
|
+
| 共享类型变更 | 多仓分别发版联调 | 一次改动,一次验证 |
|
|
107
|
+
| CI 反馈 | 每仓重复跑全量 | 利用缓存和依赖图做增量 |
|
|
108
|
+
| 新人接手 | 先理解多个仓库差异 | 先理解一套统一约定 |
|
|
109
|
+
|
|
110
|
+
## 继续阅读
|
|
111
|
+
|
|
112
|
+
- [如何管理 monorepo](./manage.md)
|
|
113
|
+
- [命令速查](./commands.md)
|
|
114
|
+
- [排障指南](./troubleshooting.md)
|
|
115
|
+
- [发包与变更日志](./publish.md)
|
|
@@ -0,0 +1,243 @@
|
|
|
1
|
+
# 如何管理 monorepo
|
|
2
|
+
|
|
3
|
+
这一页是 repoctl 文档后面的知识库页面。它不再重新解释所有命令参数,而是解释:为什么这些命令能让 monorepo 日常管理变简单。
|
|
4
|
+
|
|
5
|
+
如果你只想查命令,直接看 [repoctl 工作流与 CI](../repoctl/workflows.md) 或 [repoctl 命令速查](../repoctl/commands.md)。
|
|
6
|
+
|
|
7
|
+
## 先记住默认工作流
|
|
8
|
+
|
|
9
|
+
```bash
|
|
10
|
+
pnpm install
|
|
11
|
+
pnpm exec repo doctor
|
|
12
|
+
pnpm run repo:new
|
|
13
|
+
pnpm run repo:check
|
|
14
|
+
pnpm build
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
大多数场景里,这已经够了。
|
|
18
|
+
|
|
19
|
+
如果你在接入一个旧仓库,再多加一步:
|
|
20
|
+
|
|
21
|
+
```bash
|
|
22
|
+
pnpm exec repo init
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
这个工作流背后的顺序是:
|
|
26
|
+
|
|
27
|
+
| 阶段 | 目标 |
|
|
28
|
+
| ---- | ------------------------------------------------ |
|
|
29
|
+
| 安装 | 让 workspace 依赖和本地包链接完整 |
|
|
30
|
+
| 诊断 | 先确认仓库结构、Node、脚本、配置和提交链路可用 |
|
|
31
|
+
| 创建 | 用模板生成新包,减少手写 package metadata 和配置 |
|
|
32
|
+
| 校验 | 在提交前复现默认 hook 和 workspace typecheck |
|
|
33
|
+
| 构建 | 最后再跑更重的全仓任务 |
|
|
34
|
+
|
|
35
|
+
## 命令分层
|
|
36
|
+
|
|
37
|
+
repoctl 刻意把日常入口收敛到少量任务型命令。
|
|
38
|
+
|
|
39
|
+
### 第一层:根脚本
|
|
40
|
+
|
|
41
|
+
这是最推荐的入口:
|
|
42
|
+
|
|
43
|
+
```bash
|
|
44
|
+
pnpm exec repo init
|
|
45
|
+
pnpm run repo:new
|
|
46
|
+
pnpm exec repo doctor
|
|
47
|
+
pnpm run repo:check
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
适合:
|
|
51
|
+
|
|
52
|
+
- 新人
|
|
53
|
+
- 日常开发
|
|
54
|
+
- 文档教程
|
|
55
|
+
- 团队内部统一约定
|
|
56
|
+
|
|
57
|
+
### 第二层:主 CLI
|
|
58
|
+
|
|
59
|
+
当你要明确告诉别人“这是 CLI 行为,不只是 package.json 脚本”时,用:
|
|
60
|
+
|
|
61
|
+
```bash
|
|
62
|
+
pnpm exec repo init
|
|
63
|
+
pnpm exec repo new
|
|
64
|
+
pnpm exec repo doctor
|
|
65
|
+
pnpm exec repo check
|
|
66
|
+
pnpm exec repo upgrade
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
### 第三层:分组命令
|
|
70
|
+
|
|
71
|
+
更细的高级操作保留在分组里:
|
|
72
|
+
|
|
73
|
+
```bash
|
|
74
|
+
repo workspace upgrade
|
|
75
|
+
repo ws up
|
|
76
|
+
repo tooling init eslint vitest
|
|
77
|
+
repo tg init --all
|
|
78
|
+
repo skills sync --codex
|
|
79
|
+
repo ai prompt create --name checkout
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
## 日常任务对照表
|
|
83
|
+
|
|
84
|
+
| 你想做什么 | 推荐命令 | 说明 |
|
|
85
|
+
| ---------------------- | ------------------------------- | ---------------------------------------------------- |
|
|
86
|
+
| 初始化一个刚接入的仓库 | `pnpm exec repo init` | 同步推荐的仓库元信息和基础工程化配置 |
|
|
87
|
+
| 看仓库当前状态是否健康 | `pnpm exec repo doctor` | 先排根目录、Node、脚本、遗留配置、提交链路 |
|
|
88
|
+
| 创建一个新的包或应用 | `pnpm run repo:new` | 支持交互式选择,也支持 `-- --template` |
|
|
89
|
+
| 提交前做本地校验 | `pnpm run repo:check` | 默认对齐推荐 pre-commit / pre-push 逻辑 |
|
|
90
|
+
| 同步模板最新标准资产 | `pnpm exec repo upgrade` | 适合模板升级、老仓库补齐 |
|
|
91
|
+
| 清理演示仓库或非必要包 | `pnpm exec repo ws clean --yes` | 零安装也可以用 `pnpm dlx repo@latest ws clean --yes` |
|
|
92
|
+
|
|
93
|
+
## `doctor`、`check`、`upgrade` 的边界
|
|
94
|
+
|
|
95
|
+
这是最容易混淆的三个命令。
|
|
96
|
+
|
|
97
|
+
### `doctor`
|
|
98
|
+
|
|
99
|
+
偏“仓库体检”。
|
|
100
|
+
|
|
101
|
+
它不关心你当前改了什么代码,而是关心:
|
|
102
|
+
|
|
103
|
+
- 这个仓库是不是完整
|
|
104
|
+
- 当前目录是不是根目录
|
|
105
|
+
- 当前机器的 Node 版本能不能跑
|
|
106
|
+
- 命令入口和配置文件是不是一致
|
|
107
|
+
|
|
108
|
+
### `check`
|
|
109
|
+
|
|
110
|
+
偏“提交前校验”。
|
|
111
|
+
|
|
112
|
+
它更像一个人工触发的推荐检查入口,适合:
|
|
113
|
+
|
|
114
|
+
- 提交前自查
|
|
115
|
+
- 怀疑 lint / typecheck / hooks 有问题时快速复现
|
|
116
|
+
- 用 `repo check --dry-run`、`repo check --json --out reports/check-plan.json` 或 `repo check --markdown --redact --out reports/check-plan.md` 先确认校验路由
|
|
117
|
+
|
|
118
|
+
### `upgrade`
|
|
119
|
+
|
|
120
|
+
偏“模板资产同步”。
|
|
121
|
+
|
|
122
|
+
它解决的是:
|
|
123
|
+
|
|
124
|
+
- 模板最新默认脚本要不要补进来
|
|
125
|
+
- 工作流、配置文件、GitHub 资产要不要同步
|
|
126
|
+
- 存量仓库要不要追上现在的标准
|
|
127
|
+
|
|
128
|
+
## 配置推荐
|
|
129
|
+
|
|
130
|
+
推荐只保留一个文件:
|
|
131
|
+
|
|
132
|
+
```ts
|
|
133
|
+
// repoctl.config.ts
|
|
134
|
+
import { defineMonorepoConfig } from 'repoctl'
|
|
135
|
+
|
|
136
|
+
export default defineMonorepoConfig({
|
|
137
|
+
commands: {
|
|
138
|
+
create: {
|
|
139
|
+
defaultTemplate: 'tsdown',
|
|
140
|
+
},
|
|
141
|
+
clean: {
|
|
142
|
+
autoConfirm: true,
|
|
143
|
+
},
|
|
144
|
+
upgrade: {
|
|
145
|
+
skipOverwrite: true,
|
|
146
|
+
},
|
|
147
|
+
},
|
|
148
|
+
})
|
|
149
|
+
```
|
|
150
|
+
|
|
151
|
+
说明:
|
|
152
|
+
|
|
153
|
+
- 优先使用 `repoctl.config.ts`
|
|
154
|
+
- `monorepo.config.ts` 已不再加载
|
|
155
|
+
- 两者不能同时存在
|
|
156
|
+
|
|
157
|
+
如果同时存在,现在 CLI 会直接报错,`repo doctor` 也会把它判成阻塞项。
|
|
158
|
+
|
|
159
|
+
## `new` 的推荐用法
|
|
160
|
+
|
|
161
|
+
### 交互式
|
|
162
|
+
|
|
163
|
+
```bash
|
|
164
|
+
pnpm run repo:new
|
|
165
|
+
```
|
|
166
|
+
|
|
167
|
+
适合第一次使用模板、想先看看有哪些模板可选。
|
|
168
|
+
|
|
169
|
+
### 直接指定模板
|
|
170
|
+
|
|
171
|
+
```bash
|
|
172
|
+
pnpm exec repo new docs --template vitepress
|
|
173
|
+
pnpm exec repo new sdk --template tsdown
|
|
174
|
+
```
|
|
175
|
+
|
|
176
|
+
适合你已经明确知道要创建什么。
|
|
177
|
+
|
|
178
|
+
### 固化团队默认模板
|
|
179
|
+
|
|
180
|
+
```ts
|
|
181
|
+
import { defineMonorepoConfig } from 'repoctl'
|
|
182
|
+
|
|
183
|
+
export default defineMonorepoConfig({
|
|
184
|
+
commands: {
|
|
185
|
+
create: {
|
|
186
|
+
defaultTemplate: 'tsdown',
|
|
187
|
+
},
|
|
188
|
+
},
|
|
189
|
+
})
|
|
190
|
+
```
|
|
191
|
+
|
|
192
|
+
设置后:
|
|
193
|
+
|
|
194
|
+
```bash
|
|
195
|
+
pnpm exec repo new utils
|
|
196
|
+
```
|
|
197
|
+
|
|
198
|
+
会直接按默认模板生成,不再额外询问模板类型。
|
|
199
|
+
|
|
200
|
+
## 默认提交链路
|
|
201
|
+
|
|
202
|
+
如果你保留模板默认生成的 `.husky` 与 `lint-staged.config.js`,通常会得到这条链路:
|
|
203
|
+
|
|
204
|
+
| 阶段 | 默认行为 |
|
|
205
|
+
| ------------ | ----------------------------------------------------------------------- |
|
|
206
|
+
| `pre-commit` | 聚焦 staged 文件运行 `stylelint`、`eslint`、workspace `typecheck` |
|
|
207
|
+
| `pre-push` | 运行整仓 `lint`、`typecheck`,再补跑受影响包的 `build` / `test` / `tsd` |
|
|
208
|
+
|
|
209
|
+
这也是为什么:
|
|
210
|
+
|
|
211
|
+
- `pnpm exec repo doctor` 会检查 Husky 与 lint-staged 是否同时存在
|
|
212
|
+
- `pnpm run repo:check` 会成为最自然的人工入口
|
|
213
|
+
|
|
214
|
+
## 依赖与构建建议
|
|
215
|
+
|
|
216
|
+
```bash
|
|
217
|
+
pnpm install
|
|
218
|
+
pnpm up -rLi
|
|
219
|
+
pnpm build
|
|
220
|
+
pnpm test
|
|
221
|
+
```
|
|
222
|
+
|
|
223
|
+
- `pnpm install`:统一安装 workspace 依赖
|
|
224
|
+
- `pnpm up -rLi`:交互式升级依赖
|
|
225
|
+
- `pnpm build` / `pnpm test`:让 Turborepo 帮你做任务编排与缓存
|
|
226
|
+
|
|
227
|
+
## 工具层 API 什么时候用
|
|
228
|
+
|
|
229
|
+
如果你只是要使用默认 CLI,不需要直接碰 `@icebreakers/monorepo/tooling`。
|
|
230
|
+
|
|
231
|
+
只有下面两种情况建议直接使用:
|
|
232
|
+
|
|
233
|
+
- 你要在仓库里手写 tooling wrapper 配置
|
|
234
|
+
- 你在维护这套 CLI / 模板本身
|
|
235
|
+
|
|
236
|
+
其余大多数团队,停留在 `repoctl.config.ts` 这一层就够了。
|
|
237
|
+
|
|
238
|
+
## 继续阅读
|
|
239
|
+
|
|
240
|
+
- [repoctl 工作流与 CI](../repoctl/workflows.md)
|
|
241
|
+
- [repoctl 命令速查](../repoctl/commands.md)
|
|
242
|
+
- [repoctl 排障与报告](../repoctl/troubleshooting.md)
|
|
243
|
+
- [发包与变更日志](./publish.md)
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
# monorepo 发包与变更日志
|
|
2
|
+
|
|
3
|
+
repoctl 默认使用 pnpm 原生 versioning。它保留 Changesets 格式的变更意图,同时把版本计算、依赖传播、changelog 和发布收进 pnpm 本身。
|
|
4
|
+
|
|
5
|
+
## 日常流程
|
|
6
|
+
|
|
7
|
+
先完成质量校验,再记录变更:
|
|
8
|
+
|
|
9
|
+
```bash
|
|
10
|
+
pnpm build
|
|
11
|
+
pnpm lint
|
|
12
|
+
pnpm typecheck
|
|
13
|
+
pnpm tsd
|
|
14
|
+
pnpm test
|
|
15
|
+
pnpm change
|
|
16
|
+
pnpm change status
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
变更意图文件放在 `.changeset/*.md`,描述受影响包和 patch/minor/major。不要手动修改包版本。
|
|
20
|
+
|
|
21
|
+
## Release PR
|
|
22
|
+
|
|
23
|
+
main push 会运行:
|
|
24
|
+
|
|
25
|
+
```bash
|
|
26
|
+
pnpm version -r --dry-run
|
|
27
|
+
pnpm version -r
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
CI 将版本号、各包 `CHANGELOG.md` 和 `.changeset/ledger.yaml` 提交到 Release PR。合并 Release PR 后,下一次 main push 执行:
|
|
31
|
+
|
|
32
|
+
```bash
|
|
33
|
+
pnpm publish -r --report-summary --provenance --no-git-checks
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
pnpm 根据 registry 中已有的版本自动跳过已发布包。CI 读取 `pnpm-publish-summary.json` 创建 `package@version` tag 和 GitHub Release,发布操作可以安全重试。
|
|
37
|
+
|
|
38
|
+
## Workspace versioning 配置
|
|
39
|
+
|
|
40
|
+
根 `pnpm-workspace.yaml` 中的关键配置:
|
|
41
|
+
|
|
42
|
+
```yaml
|
|
43
|
+
versioning:
|
|
44
|
+
fixed:
|
|
45
|
+
- ['@icebreakers/monorepo', repoctl]
|
|
46
|
+
ignore:
|
|
47
|
+
- '@icebreakers/client'
|
|
48
|
+
changelog:
|
|
49
|
+
storage: repository
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
`fixed` 保证组内包同版本;`ignore` 排除 private 包;`repository` 让 changelog 作为源代码提交。
|
|
53
|
+
|
|
54
|
+
## Prerelease lanes
|
|
55
|
+
|
|
56
|
+
预发布使用 pnpm lanes:
|
|
57
|
+
|
|
58
|
+
```bash
|
|
59
|
+
pnpm exec repo release pre enter beta
|
|
60
|
+
git add pnpm-workspace.yaml && git commit -m "chore(release): enter beta lane"
|
|
61
|
+
git push
|
|
62
|
+
pnpm exec repo release pre publish
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
预发布版本为 `X.Y.Z-beta.N`,并使用 npm `beta` dist-tag。退出时运行:
|
|
66
|
+
|
|
67
|
+
```bash
|
|
68
|
+
pnpm exec repo release pre exit
|
|
69
|
+
git add pnpm-workspace.yaml && git commit -m "chore(release): exit prerelease lane"
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
fixed group 必须整体切换 lane,不能只移动其中一个包。
|
|
73
|
+
|
|
74
|
+
## 恢复未发布版本
|
|
75
|
+
|
|
76
|
+
如果版本提交已合并但 npm 发布失败,在 Release workflow 手动选择 `publish-unpublished`,填入 package 和 version。CI 会校验 main 上的 manifest 版本,使用 pnpm 发布并重新生成 tag 和 GitHub Release 元数据。
|
|
77
|
+
|
|
78
|
+
## repoctl 的边界
|
|
79
|
+
|
|
80
|
+
生成的 GitHub Actions 只保留环境准备和一个 `pnpm exec repo release ci` 调用。
|
|
81
|
+
repoctl 负责发布前 build/lint/test、lane 一致性检查、Release PR、npm
|
|
82
|
+
发布、package tag 与 GitHub Release;pnpm 负责变更意图、版本计算、changelog、
|
|
83
|
+
ledger 和 registry 发布细节。
|
|
84
|
+
|
|
85
|
+
存量项目首次迁移运行 `pnpm dlx repoctl@latest upgrade --yes`,后续使用
|
|
86
|
+
`pnpm exec repo upgrade --yes` 即可跟随 repoctl 升级。未标记的自定义 release
|
|
87
|
+
workflow 默认不会被覆盖,确认后可使用 `repo upgrade --overwrite-release`。
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
# 模板速查
|
|
2
|
+
|
|
3
|
+
模板创建已经收敛到 repoctl 文档:
|
|
4
|
+
|
|
5
|
+
- [repoctl 模板与创建](../repoctl/templates.md)
|
|
6
|
+
- [repoctl 快速开始](../repoctl/getting-started.md)
|
|
7
|
+
|
|
8
|
+
## monorepo 知识点:模板为什么重要
|
|
9
|
+
|
|
10
|
+
当仓库里存在多种产物时,模板能把重复选择前置成稳定默认值:
|
|
11
|
+
|
|
12
|
+
| 产物 | 常见目录 | 关注点 |
|
|
13
|
+
| ------------- | ------------------------ | ------------------------------ |
|
|
14
|
+
| TypeScript 库 | `packages/*` | exports、types、构建和 tsd |
|
|
15
|
+
| Vue 组件库 | `packages/*` | SFC、样式校验、类型声明 |
|
|
16
|
+
| 应用 | `apps/*` | dev、build、部署资产 |
|
|
17
|
+
| 服务 | `apps/*` | API 入口、运行时类型、环境变量 |
|
|
18
|
+
| 文档站 | `apps/*` | VitePress 配置、导航、内容结构 |
|
|
19
|
+
| CLI | `apps/*` 或 `packages/*` | bin 入口、参数解析、发布 |
|
|
20
|
+
|
|
21
|
+
repoctl 的 `repo templates` 和 `repo new` 负责把这些约定落实到文件系统。
|