@icebreakers/monorepo-templates 1.2.1 → 1.3.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/assets/.github/workflows/ci.yml +4 -4
- package/assets/.github/workflows/release.yml +8 -7
- package/assets/package.json +9 -8
- package/assets/renovate.json +0 -1
- package/assets/turbo.json +3 -0
- package/assets-data.mjs +0 -1
- package/dist/cli.mjs +1 -1
- package/dist/index.mjs +1 -1
- package/dist/{prepare--cxFop8c.mjs → prepare-D7eJqEqy.mjs} +1 -2
- package/package.json +5 -5
- package/templates/cli/package.json +1 -1
- package/templates/client/package.json +10 -10
- package/templates/client/worker-configuration.d.ts +463 -202
- package/templates/server/package.json +3 -3
- package/templates/server/worker-configuration.d.ts +463 -202
- package/templates/tsdown/package.json +1 -1
- package/templates/vitepress/.vitepress/config.ts +26 -126
- package/templates/vitepress/.vitepress/env.d.ts +1 -0
- package/templates/vitepress/.vitepress/home/content.ts +94 -0
- package/templates/vitepress/.vitepress/home/types.ts +49 -0
- package/templates/vitepress/.vitepress/navigation/routes.ts +146 -0
- package/templates/vitepress/.vitepress/seo.ts +54 -0
- package/templates/vitepress/.vitepress/theme/Layout.vue +27 -0
- package/templates/vitepress/.vitepress/theme/components/HomePage.vue +112 -0
- package/templates/vitepress/.vitepress/theme/home/foundation.css +237 -0
- package/templates/vitepress/.vitepress/theme/home/index.css +3 -0
- package/templates/vitepress/.vitepress/theme/home/responsive.css +142 -0
- package/templates/vitepress/.vitepress/theme/home/sections.css +232 -0
- package/templates/vitepress/.vitepress/theme/index.ts +11 -1
- package/templates/vitepress/ai/llms-txt.md +2 -2
- package/templates/vitepress/index.md +6 -60
- package/templates/vitepress/learn/index.md +18 -0
- package/templates/vitepress/{monorepo → learn/monorepo}/commands.md +1 -1
- package/templates/vitepress/{monorepo → learn/monorepo}/index.md +3 -3
- package/templates/vitepress/{monorepo → learn/monorepo}/templates.md +1 -1
- package/templates/vitepress/learn/packages/examples/2.npm-basic-package/README.md +1 -0
- package/templates/vitepress/learn/packages/examples/3.npm-basic-package/README.md +1 -0
- package/templates/vitepress/learn/packages/index.md +36 -0
- package/templates/vitepress/learn/packages/modern/bundlers.md +40 -0
- package/templates/vitepress/learn/packages/modern/dts.md +48 -0
- package/templates/vitepress/learn/packages/modern/esm-vs-cjs.md +42 -0
- package/templates/vitepress/learn/packages/modern/index.md +38 -0
- package/templates/vitepress/learn/packages/modern/package-entry-points.md +46 -0
- package/templates/vitepress/learn/packages/modern/typescript.md +43 -0
- package/templates/vitepress/{why/index.md → learn/packages/modern-overview.md} +1 -1
- package/templates/vitepress/learn/packages/module-extensions.md +34 -0
- package/templates/vitepress/learn/packages/publish.md +43 -0
- package/templates/vitepress/learn/packages/reuse-javascript.md +39 -0
- package/templates/vitepress/learn/packages/runtime-globals.md +36 -0
- package/templates/vitepress/{repoctl/index.md → learn/repoctl-model.md} +8 -8
- package/templates/vitepress/learn/tools/changeset.md +30 -0
- package/templates/vitepress/learn/tools/husky.md +50 -0
- package/templates/vitepress/learn/tools/lint-staged.md +39 -0
- package/templates/vitepress/{tools → learn/tools}/llms-txt.md +1 -1
- package/templates/vitepress/learn/tools/pnpm.md +47 -0
- package/templates/vitepress/learn/tools/renovate.md +31 -0
- package/templates/vitepress/learn/tools/turborepo.md +40 -0
- package/templates/vitepress/package.json +14 -7
- package/templates/vitepress/public/brand/apple-touch-icon.png +0 -0
- package/templates/vitepress/public/brand/favicon.ico +0 -0
- package/templates/vitepress/public/brand/repoctl-lockup-dark.svg +6 -0
- package/templates/vitepress/public/brand/repoctl-lockup.svg +20 -0
- package/templates/vitepress/public/brand/repoctl-mark-192.png +0 -0
- package/templates/vitepress/public/brand/repoctl-mark-dark.svg +13 -0
- package/templates/vitepress/public/brand/repoctl-mark.svg +13 -0
- package/templates/vitepress/public/brand/repoctl-social-en.png +0 -0
- package/templates/vitepress/public/brand/repoctl-social-en.webp +0 -0
- package/templates/vitepress/public/brand/repoctl-social-zh.png +0 -0
- package/templates/vitepress/public/brand/repoctl-social-zh.webp +0 -0
- package/templates/vitepress/public/favicon.ico +0 -0
- package/templates/vitepress/public/logo.jpg +0 -0
- package/templates/vitepress/public/repoctl-doctor.png +0 -0
- package/templates/vitepress/{repoctl → reference}/commands.md +2 -2
- package/templates/vitepress/reference/index.md +15 -0
- package/templates/vitepress/reference/output.md +37 -0
- package/templates/vitepress/{repoctl → reference}/templates.md +2 -2
- package/templates/vitepress/scripts/check-locales.ts +196 -0
- package/templates/vitepress/start/choose-next.md +14 -0
- package/templates/vitepress/start/first-run.md +39 -0
- package/templates/vitepress/start/index.md +26 -0
- package/templates/vitepress/{repoctl/getting-started.md → start/install.md} +5 -5
- package/templates/vitepress/{repoctl → tasks}/adopt-existing.md +30 -4
- package/templates/vitepress/{repoctl → tasks}/checks.md +27 -1
- package/templates/vitepress/{repoctl/workflows.md → tasks/ci.md} +65 -4
- package/templates/vitepress/tasks/create-project.md +37 -0
- package/templates/vitepress/{repoctl/scenarios.md → tasks/index.md} +8 -8
- package/templates/vitepress/tasks/release.md +31 -0
- package/templates/vitepress/{repoctl → tasks}/reports.md +25 -0
- package/templates/vitepress/{repoctl → tasks}/troubleshooting.md +30 -4
- package/templates/vitepress/tsconfig.json +7 -0
- package/templates/vitepress/wrangler.jsonc +20 -3
- package/templates/vitepress/zh/ai/index.md +1 -1
- package/templates/vitepress/zh/ai/llms-txt.md +7 -7
- package/templates/vitepress/zh/index.md +6 -63
- package/templates/vitepress/zh/learn/index.md +18 -0
- package/templates/vitepress/zh/{monorepo → learn/monorepo}/commands.md +3 -3
- package/templates/vitepress/zh/{monorepo → learn/monorepo}/manage.md +4 -4
- package/templates/vitepress/zh/{monorepo → learn/monorepo}/templates.md +2 -2
- package/templates/vitepress/zh/{monorepo → learn/monorepo}/troubleshooting.md +2 -2
- package/templates/vitepress/zh/learn/packages/examples/2.npm-basic-package/README.md +1 -0
- package/templates/vitepress/zh/learn/packages/examples/3.npm-basic-package/README.md +1 -0
- package/templates/vitepress/zh/{why → learn/packages}/modern/index.md +1 -1
- package/templates/vitepress/zh/learn/packages/modern-overview.md +38 -0
- package/templates/vitepress/zh/{repoctl/index.md → learn/repoctl-model.md} +19 -19
- package/templates/vitepress/zh/{tools → learn/tools}/husky.md +1 -1
- package/templates/vitepress/zh/{tools → learn/tools}/lint-staged.md +1 -1
- package/templates/vitepress/zh/{tools → learn/tools}/llms-txt.md +1 -1
- package/templates/vitepress/zh/{tools → learn/tools}/pnpm.md +1 -1
- package/templates/vitepress/zh/{tools → learn/tools}/turborepo.md +1 -1
- package/templates/vitepress/zh/{repoctl → reference}/commands.md +4 -4
- package/templates/vitepress/zh/{repoctl → reference}/config.md +1 -1
- package/templates/vitepress/zh/reference/index.md +15 -0
- package/templates/vitepress/zh/reference/output.md +37 -0
- package/templates/vitepress/zh/{repoctl → reference}/templates.md +4 -4
- package/templates/vitepress/zh/start/choose-next.md +14 -0
- package/templates/vitepress/zh/{repoctl/doctor.md → start/diagnose.md} +1 -1
- package/templates/vitepress/zh/start/first-run.md +39 -0
- package/templates/vitepress/zh/start/index.md +26 -0
- package/templates/vitepress/zh/{repoctl/getting-started.md → start/install.md} +5 -5
- package/templates/vitepress/zh/{repoctl → tasks}/adopt-existing.md +30 -4
- package/templates/vitepress/zh/{repoctl → tasks}/checks.md +27 -1
- package/templates/vitepress/zh/{repoctl/workflows.md → tasks/ci.md} +73 -12
- package/templates/vitepress/zh/tasks/create-project.md +37 -0
- package/templates/vitepress/zh/{repoctl/scenarios.md → tasks/index.md} +8 -8
- package/templates/vitepress/zh/tasks/release.md +31 -0
- package/templates/vitepress/zh/{repoctl → tasks}/reports.md +25 -0
- package/templates/vitepress/zh/{repoctl → tasks}/troubleshooting.md +39 -13
- package/templates/vue-lib/package.json +3 -3
- package/assets/netlify.toml +0 -14
- package/templates/vitepress/getting-started.md +0 -11
- package/templates/vitepress/knowledge/index.md +0 -26
- package/templates/vitepress/thinking.md +0 -7
- package/templates/vitepress/tools/changeset.md +0 -25
- package/templates/vitepress/tools/husky.md +0 -12
- package/templates/vitepress/tools/lint-staged.md +0 -12
- package/templates/vitepress/tools/pnpm.md +0 -15
- package/templates/vitepress/tools/renovate.md +0 -7
- package/templates/vitepress/tools/turborepo.md +0 -14
- package/templates/vitepress/why/examples/2.npm-basic-package/README.md +0 -1
- package/templates/vitepress/why/examples/3.npm-basic-package/README.md +0 -1
- package/templates/vitepress/why/how-to-reuse-js-code.md +0 -9
- package/templates/vitepress/why/js-cjs-mjs.md +0 -12
- package/templates/vitepress/why/js-keywords.md +0 -7
- package/templates/vitepress/why/modern/bundlers.md +0 -5
- package/templates/vitepress/why/modern/dts.md +0 -7
- package/templates/vitepress/why/modern/esm-vs-cjs.md +0 -7
- package/templates/vitepress/why/modern/index.md +0 -14
- package/templates/vitepress/why/modern/package-entry-points.md +0 -17
- package/templates/vitepress/why/modern/typescript.md +0 -7
- package/templates/vitepress/why/publish-basic-npm-package.md +0 -19
- package/templates/vitepress/why/what-is-npm-package.md +0 -7
- package/templates/vitepress/zh/getting-started.md +0 -40
- package/templates/vitepress/zh/knowledge/index.md +0 -50
- package/templates/vitepress/zh/thinking.md +0 -88
- package/templates/vitepress/zh/why/examples/2.npm-basic-package/README.md +0 -1
- package/templates/vitepress/zh/why/examples/3.npm-basic-package/README.md +0 -1
- package/templates/vitepress/zh/why/index.md +0 -1
- /package/templates/vitepress/{monorepo → learn/monorepo}/manage.md +0 -0
- /package/templates/vitepress/{monorepo → learn/monorepo}/publish.md +0 -0
- /package/templates/vitepress/{monorepo → learn/monorepo}/troubleshooting.md +0 -0
- /package/templates/vitepress/{why → learn/packages}/assets/npm-dt.svg +0 -0
- /package/templates/vitepress/{why → learn/packages}/assets/npm-ts.svg +0 -0
- /package/templates/vitepress/{why → learn/packages}/examples/0.npm-basic-package/index.js +0 -0
- /package/templates/vitepress/{why → learn/packages}/examples/0.npm-basic-package/package.json +0 -0
- /package/templates/vitepress/{why → learn/packages}/examples/1.npm-basic-package/index.cjs +0 -0
- /package/templates/vitepress/{why → learn/packages}/examples/1.npm-basic-package/index.d.ts +0 -0
- /package/templates/vitepress/{why → learn/packages}/examples/1.npm-basic-package/index.js +0 -0
- /package/templates/vitepress/{why → learn/packages}/examples/1.npm-basic-package/package.json +0 -0
- /package/templates/vitepress/{why → learn/packages}/examples/2.npm-basic-package/package-lock.json +0 -0
- /package/templates/vitepress/{why → learn/packages}/examples/2.npm-basic-package/package.json +0 -0
- /package/templates/vitepress/{why → learn/packages}/examples/2.npm-basic-package/rename-ext.js +0 -0
- /package/templates/vitepress/{why → learn/packages}/examples/2.npm-basic-package/src/index.ts +0 -0
- /package/templates/vitepress/{why → learn/packages}/examples/2.npm-basic-package/tsconfig.cjs.json +0 -0
- /package/templates/vitepress/{why → learn/packages}/examples/2.npm-basic-package/tsconfig.esm.json +0 -0
- /package/templates/vitepress/{why → learn/packages}/examples/2.npm-basic-package/tsconfig.json +0 -0
- /package/templates/vitepress/{why → learn/packages}/examples/3.npm-basic-package/package-lock.json +0 -0
- /package/templates/vitepress/{why → learn/packages}/examples/3.npm-basic-package/package.json +0 -0
- /package/templates/vitepress/{why → learn/packages}/examples/3.npm-basic-package/src/index.ts +0 -0
- /package/templates/vitepress/{why → learn/packages}/examples/3.npm-basic-package/tsconfig.json +0 -0
- /package/templates/vitepress/{why → learn/packages}/examples/3.npm-basic-package/tsdown.config.ts +0 -0
- /package/templates/vitepress/{why → learn/packages}/examples/usage-cjs/cjs.cjs +0 -0
- /package/templates/vitepress/{why → learn/packages}/examples/usage-cjs/esm.mjs +0 -0
- /package/templates/vitepress/{why → learn/packages}/examples/usage-cjs/index.js +0 -0
- /package/templates/vitepress/{why → learn/packages}/examples/usage-cjs/package-lock.json +0 -0
- /package/templates/vitepress/{why → learn/packages}/examples/usage-cjs/package.json +0 -0
- /package/templates/vitepress/{why → learn/packages}/examples/usage-esm/cjs.cjs +0 -0
- /package/templates/vitepress/{why → learn/packages}/examples/usage-esm/createRequire.js +0 -0
- /package/templates/vitepress/{why → learn/packages}/examples/usage-esm/esm.mjs +0 -0
- /package/templates/vitepress/{why → learn/packages}/examples/usage-esm/index.js +0 -0
- /package/templates/vitepress/{why → learn/packages}/examples/usage-esm/package-lock.json +0 -0
- /package/templates/vitepress/{why → learn/packages}/examples/usage-esm/package.json +0 -0
- /package/templates/vitepress/{tools → learn/tools}/index.md +0 -0
- /package/templates/vitepress/{repoctl → reference}/aliases.md +0 -0
- /package/templates/vitepress/{repoctl → reference}/config.md +0 -0
- /package/templates/vitepress/{repoctl → reference}/execution-model.md +0 -0
- /package/templates/vitepress/{repoctl → reference}/template-assets.md +0 -0
- /package/templates/vitepress/{repoctl/doctor.md → start/diagnose.md} +0 -0
- /package/templates/vitepress/zh/{monorepo → learn/monorepo}/index.md +0 -0
- /package/templates/vitepress/zh/{monorepo → learn/monorepo}/publish.md +0 -0
- /package/templates/vitepress/zh/{why → learn/packages}/assets/npm-dt.svg +0 -0
- /package/templates/vitepress/zh/{why → learn/packages}/assets/npm-ts.svg +0 -0
- /package/templates/vitepress/zh/{why → learn/packages}/examples/0.npm-basic-package/index.js +0 -0
- /package/templates/vitepress/zh/{why → learn/packages}/examples/0.npm-basic-package/package.json +0 -0
- /package/templates/vitepress/zh/{why → learn/packages}/examples/1.npm-basic-package/index.cjs +0 -0
- /package/templates/vitepress/zh/{why → learn/packages}/examples/1.npm-basic-package/index.d.ts +0 -0
- /package/templates/vitepress/zh/{why → learn/packages}/examples/1.npm-basic-package/index.js +0 -0
- /package/templates/vitepress/zh/{why → learn/packages}/examples/1.npm-basic-package/package.json +0 -0
- /package/templates/vitepress/zh/{why → learn/packages}/examples/2.npm-basic-package/package-lock.json +0 -0
- /package/templates/vitepress/zh/{why → learn/packages}/examples/2.npm-basic-package/package.json +0 -0
- /package/templates/vitepress/zh/{why → learn/packages}/examples/2.npm-basic-package/rename-ext.js +0 -0
- /package/templates/vitepress/zh/{why → learn/packages}/examples/2.npm-basic-package/src/index.ts +0 -0
- /package/templates/vitepress/zh/{why → learn/packages}/examples/2.npm-basic-package/tsconfig.cjs.json +0 -0
- /package/templates/vitepress/zh/{why → learn/packages}/examples/2.npm-basic-package/tsconfig.esm.json +0 -0
- /package/templates/vitepress/zh/{why → learn/packages}/examples/2.npm-basic-package/tsconfig.json +0 -0
- /package/templates/vitepress/zh/{why → learn/packages}/examples/3.npm-basic-package/package-lock.json +0 -0
- /package/templates/vitepress/zh/{why → learn/packages}/examples/3.npm-basic-package/package.json +0 -0
- /package/templates/vitepress/zh/{why → learn/packages}/examples/3.npm-basic-package/src/index.ts +0 -0
- /package/templates/vitepress/zh/{why → learn/packages}/examples/3.npm-basic-package/tsconfig.json +0 -0
- /package/templates/vitepress/zh/{why → learn/packages}/examples/3.npm-basic-package/tsdown.config.ts +0 -0
- /package/templates/vitepress/zh/{why → learn/packages}/examples/usage-cjs/cjs.cjs +0 -0
- /package/templates/vitepress/zh/{why → learn/packages}/examples/usage-cjs/esm.mjs +0 -0
- /package/templates/vitepress/zh/{why → learn/packages}/examples/usage-cjs/index.js +0 -0
- /package/templates/vitepress/zh/{why → learn/packages}/examples/usage-cjs/package-lock.json +0 -0
- /package/templates/vitepress/zh/{why → learn/packages}/examples/usage-cjs/package.json +0 -0
- /package/templates/vitepress/zh/{why → learn/packages}/examples/usage-esm/cjs.cjs +0 -0
- /package/templates/vitepress/zh/{why → learn/packages}/examples/usage-esm/createRequire.js +0 -0
- /package/templates/vitepress/zh/{why → learn/packages}/examples/usage-esm/esm.mjs +0 -0
- /package/templates/vitepress/zh/{why → learn/packages}/examples/usage-esm/index.js +0 -0
- /package/templates/vitepress/zh/{why → learn/packages}/examples/usage-esm/package-lock.json +0 -0
- /package/templates/vitepress/zh/{why → learn/packages}/examples/usage-esm/package.json +0 -0
- /package/templates/vitepress/zh/{why/what-is-npm-package.md → learn/packages/index.md} +0 -0
- /package/templates/vitepress/zh/{why → learn/packages}/modern/bundlers.md +0 -0
- /package/templates/vitepress/zh/{why → learn/packages}/modern/dts.md +0 -0
- /package/templates/vitepress/zh/{why → learn/packages}/modern/esm-vs-cjs.md +0 -0
- /package/templates/vitepress/zh/{why → learn/packages}/modern/package-entry-points.md +0 -0
- /package/templates/vitepress/zh/{why → learn/packages}/modern/typescript.md +0 -0
- /package/templates/vitepress/zh/{why/js-cjs-mjs.md → learn/packages/module-extensions.md} +0 -0
- /package/templates/vitepress/zh/{why/publish-basic-npm-package.md → learn/packages/publish.md} +0 -0
- /package/templates/vitepress/zh/{why/how-to-reuse-js-code.md → learn/packages/reuse-javascript.md} +0 -0
- /package/templates/vitepress/zh/{why/js-keywords.md → learn/packages/runtime-globals.md} +0 -0
- /package/templates/vitepress/zh/{tools → learn/tools}/changeset.md +0 -0
- /package/templates/vitepress/zh/{tools → learn/tools}/index.md +0 -0
- /package/templates/vitepress/zh/{tools → learn/tools}/renovate.md +0 -0
- /package/templates/vitepress/zh/{repoctl → reference}/aliases.md +0 -0
- /package/templates/vitepress/zh/{repoctl → reference}/execution-model.md +0 -0
- /package/templates/vitepress/zh/{repoctl → reference}/template-assets.md +0 -0
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
# 发布包
|
|
2
|
+
|
|
3
|
+
当改动准备好更新版本并发布时,使用这个任务页。任何写入 registry 的操作都应该先经过可审查的发布计划。
|
|
4
|
+
|
|
5
|
+
## 前置条件
|
|
6
|
+
|
|
7
|
+
- `repo doctor` 报告包管理器和发布配置有效。
|
|
8
|
+
- 工作区除本次改动外保持干净。
|
|
9
|
+
- 每个可发布改动都有 changeset 或仓库约定的 intent 文件。
|
|
10
|
+
|
|
11
|
+
## 最小命令
|
|
12
|
+
|
|
13
|
+
```bash
|
|
14
|
+
repo release --dry-run
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
检查包组、版本、变更日志和发布命令。计划确认后,再去掉 `--dry-run` 执行发布。
|
|
18
|
+
|
|
19
|
+
## 预期结果
|
|
20
|
+
|
|
21
|
+
发布报告会列出将要变化的包、版本决策和每个子进程。发布成功后,还会执行配置好的 post-publish hooks。
|
|
22
|
+
|
|
23
|
+
## 常见分支
|
|
24
|
+
|
|
25
|
+
- 缺少 intent:添加 changeset 后重新生成计划。
|
|
26
|
+
- 固定版本组不一致:先检查包之间的关系,再修改版本。
|
|
27
|
+
- registry 认证失败:刷新本地 token 后重试,不要提交凭据。
|
|
28
|
+
|
|
29
|
+
## 下一步
|
|
30
|
+
|
|
31
|
+
阅读[发包与变更日志](/zh/learn/monorepo/publish),再查看[报告与输出](/zh/tasks/reports)了解 CI 产物。
|
|
@@ -4,6 +4,31 @@ description: 说明 repoctl 的 JSON、Markdown、out、redact、env info、env
|
|
|
4
4
|
|
|
5
5
|
# 报告与自动化输出
|
|
6
6
|
|
|
7
|
+
## 适用场景
|
|
8
|
+
|
|
9
|
+
当成员、CI 或支持请求需要一份可保存的诊断或计划记录时,使用这个任务。
|
|
10
|
+
|
|
11
|
+
## 前置条件
|
|
12
|
+
|
|
13
|
+
- 选择一个被忽略或会作为 CI artifact 上传的 `reports/` 目录。
|
|
14
|
+
- 分享环境信息前使用 `--redact`。
|
|
15
|
+
|
|
16
|
+
## 最小命令
|
|
17
|
+
|
|
18
|
+
```bash
|
|
19
|
+
repo env support --markdown --redact --out reports/support.md
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
## 预期输出
|
|
23
|
+
|
|
24
|
+
输出文件包含稳定的标题和命令结果,可以附在 pull request 或 issue 中。
|
|
25
|
+
|
|
26
|
+
## 常见分支
|
|
27
|
+
|
|
28
|
+
- 其他工具需要读取结果:使用带 `--json` 的 JSON 输出。
|
|
29
|
+
- 只想查看计划:把 `--dry-run` 和目标格式一起使用。
|
|
30
|
+
- 报告中出现本地路径或 token:加上 `--redact` 重新生成。
|
|
31
|
+
|
|
7
32
|
repoctl 的报告能力用于把本地上下文变成可保存、可脱敏、可给脚本读取的文件。它适合 CI artifact、issue 模板、编辑器集成和跨机器排障。
|
|
8
33
|
|
|
9
34
|
## 1. 通用输出参数
|
|
@@ -1,4 +1,30 @@
|
|
|
1
|
-
#
|
|
1
|
+
# 排障
|
|
2
|
+
|
|
3
|
+
## 适用场景
|
|
4
|
+
|
|
5
|
+
初始化、校验、模板或自动化出现意外结果时,使用这个任务。
|
|
6
|
+
|
|
7
|
+
## 前置条件
|
|
8
|
+
|
|
9
|
+
- 在仓库根目录执行命令。
|
|
10
|
+
- 保留原始错误和仓库 revision。
|
|
11
|
+
- 分享命令输出前移除敏感值。
|
|
12
|
+
|
|
13
|
+
## 最小命令
|
|
14
|
+
|
|
15
|
+
```bash
|
|
16
|
+
repo doctor --markdown --redact --out reports/doctor.md
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
## 预期输出
|
|
20
|
+
|
|
21
|
+
报告会指出仓库根目录、包管理器、workspace 配置、工具链和第一个失败的检查。
|
|
22
|
+
|
|
23
|
+
## 常见分支
|
|
24
|
+
|
|
25
|
+
- 命令从子目录执行:切换到 workspace 根目录。
|
|
26
|
+
- 配置文件和受管资产冲突:先查看计划,再决定是否覆盖。
|
|
27
|
+
- 模板键不存在:使用 `repo templates` 列出模板。
|
|
2
28
|
|
|
3
29
|
repoctl 的排障重点不是让你猜错在哪里,而是尽量输出可以复现、可以保存、可以发给同事的报告。
|
|
4
30
|
|
|
@@ -51,13 +77,13 @@ repo env paths --markdown --redact --out reports/paths.md
|
|
|
51
77
|
|
|
52
78
|
## 先判断问题类型
|
|
53
79
|
|
|
54
|
-
| 现象 | 优先命令 | 继续阅读
|
|
55
|
-
| ------------------------------ | ----------------------------------------- |
|
|
56
|
-
| 不确定当前目录是不是仓库根目录 | `repo doctor` | [doctor 诊断](
|
|
57
|
-
| 不知道 `repo check` 会跑什么 | `repo check --dry-run` | [
|
|
58
|
-
| CI 失败但日志不完整 | `repo env support --markdown --redact` | [报告与自动化输出](
|
|
59
|
-
| 模板创建结果不符合预期 | `repo new <name> --template <key> --json` | [模板资产治理](
|
|
60
|
-
| 模板列表或元数据异常 | `repo templates --check` | [模板资产治理](
|
|
80
|
+
| 现象 | 优先命令 | 继续阅读 |
|
|
81
|
+
| ------------------------------ | ----------------------------------------- | --------------------------------------------- |
|
|
82
|
+
| 不确定当前目录是不是仓库根目录 | `repo doctor` | [doctor 诊断](/zh/start/diagnose) |
|
|
83
|
+
| 不知道 `repo check` 会跑什么 | `repo check --dry-run` | [运行校验](/zh/tasks/checks) |
|
|
84
|
+
| CI 失败但日志不完整 | `repo env support --markdown --redact` | [报告与自动化输出](/zh/tasks/reports) |
|
|
85
|
+
| 模板创建结果不符合预期 | `repo new <name> --template <key> --json` | [模板资产治理](/zh/reference/template-assets) |
|
|
86
|
+
| 模板列表或元数据异常 | `repo templates --check` | [模板资产治理](/zh/reference/template-assets) |
|
|
61
87
|
|
|
62
88
|
## 常见问题
|
|
63
89
|
|
|
@@ -103,8 +129,8 @@ repo check --json --out reports/check-plan.json
|
|
|
103
129
|
|
|
104
130
|
## 继续阅读
|
|
105
131
|
|
|
106
|
-
- [
|
|
107
|
-
- [命令速查](
|
|
108
|
-
- [doctor 诊断](
|
|
109
|
-
- [报告与自动化输出](
|
|
110
|
-
- [命令别名](
|
|
132
|
+
- [把校验加入 CI](/zh/tasks/ci)
|
|
133
|
+
- [命令速查](/zh/reference/commands)
|
|
134
|
+
- [doctor 诊断](/zh/start/diagnose)
|
|
135
|
+
- [报告与自动化输出](/zh/tasks/reports)
|
|
136
|
+
- [命令别名](/zh/reference/aliases)
|
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
"description": "Internal Vue library template shipped with repoctl",
|
|
7
7
|
"author": "ice breaker <hi@sonofmagic.top>",
|
|
8
8
|
"license": "ISC",
|
|
9
|
-
"homepage": "https://
|
|
9
|
+
"homepage": "https://repoctl.icebreaker.top",
|
|
10
10
|
"repository": {
|
|
11
11
|
"type": "git",
|
|
12
12
|
"url": "git+https://github.com/sonofmagic/repoctl.git",
|
|
@@ -60,9 +60,9 @@
|
|
|
60
60
|
"@vue/test-utils": "^2.4.11",
|
|
61
61
|
"@vue/tsconfig": "^0.9.1",
|
|
62
62
|
"jsdom": "^30.0.1",
|
|
63
|
-
"vite": "^8.2.
|
|
63
|
+
"vite": "^8.2.2",
|
|
64
64
|
"vite-plugin-dts": "^5.0.3",
|
|
65
65
|
"vue": "^3.5.41",
|
|
66
|
-
"vue-tsc": "^3.3.
|
|
66
|
+
"vue-tsc": "^3.3.11"
|
|
67
67
|
}
|
|
68
68
|
}
|
package/assets/netlify.toml
DELETED
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
# Getting Started
|
|
2
|
-
|
|
3
|
-
The current setup guide is [repoctl Getting Started](./repoctl/getting-started.md).
|
|
4
|
-
|
|
5
|
-
```bash
|
|
6
|
-
pnpm add -D repoctl
|
|
7
|
-
pnpm exec repo init
|
|
8
|
-
pnpm exec repo doctor
|
|
9
|
-
```
|
|
10
|
-
|
|
11
|
-
Use [Adopt Existing Repositories](./repoctl/adopt-existing.md) when introducing repoctl to an established workspace.
|
|
@@ -1,26 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
outline: deep
|
|
3
|
-
---
|
|
4
|
-
|
|
5
|
-
# Knowledge Base
|
|
6
|
-
|
|
7
|
-
This section explains the engineering decisions behind repoctl rather than only listing commands.
|
|
8
|
-
|
|
9
|
-
## Monorepo Topics
|
|
10
|
-
|
|
11
|
-
- [Why Monorepo](../monorepo/index.md)
|
|
12
|
-
- [Managing A Monorepo](../monorepo/manage.md)
|
|
13
|
-
- [Publishing and Changelogs](../monorepo/publish.md)
|
|
14
|
-
- [Command Reference](../monorepo/commands.md)
|
|
15
|
-
- [Template Systems](../monorepo/templates.md)
|
|
16
|
-
- [Troubleshooting](../monorepo/troubleshooting.md)
|
|
17
|
-
|
|
18
|
-
## Modern Package Topics
|
|
19
|
-
|
|
20
|
-
- [Reusing JavaScript Code](../why/how-to-reuse-js-code.md)
|
|
21
|
-
- [JavaScript Module Extensions](../why/js-cjs-mjs.md)
|
|
22
|
-
- [What Is An npm Package?](../why/what-is-npm-package.md)
|
|
23
|
-
- [Publishing An npm Package](../why/publish-basic-npm-package.md)
|
|
24
|
-
- [Modern Package Guide](../why/modern/index.md)
|
|
25
|
-
|
|
26
|
-
Start with the repoctl guide when you need an action. Use this knowledge base when you need to understand the tradeoffs behind that action.
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
# Project Evolution
|
|
2
|
-
|
|
3
|
-
This repository began as a reusable monorepo template. It has since evolved into repoctl: a task-first CLI for initializing, diagnosing, creating, validating, upgrading, and releasing pnpm and Turborepo monorepos.
|
|
4
|
-
|
|
5
|
-
Templates remain an important capability, but they are now private source workspaces packaged through `@icebreakers/monorepo-templates`, not the product identity or independent release units.
|
|
6
|
-
|
|
7
|
-
See the [repoctl overview](./repoctl/index.md) for the current architecture and public entrypoints.
|
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
# pnpm Versioning
|
|
2
|
-
|
|
3
|
-
This repository uses pnpm change intents and workspace versioning for releases.
|
|
4
|
-
|
|
5
|
-
## Daily Development
|
|
6
|
-
|
|
7
|
-
```bash
|
|
8
|
-
pnpm change
|
|
9
|
-
pnpm change status
|
|
10
|
-
```
|
|
11
|
-
|
|
12
|
-
Choose every publishable package whose public behavior changed and record the correct patch, minor, or major level. Private template workspaces are not release units.
|
|
13
|
-
|
|
14
|
-
## Release
|
|
15
|
-
|
|
16
|
-
```bash
|
|
17
|
-
repo release stable prepare
|
|
18
|
-
repo release stable publish
|
|
19
|
-
```
|
|
20
|
-
|
|
21
|
-
repoctl coordinates the release workflow, validates configuration, and publishes metadata. pnpm owns the versioning state and repository changelog storage.
|
|
22
|
-
|
|
23
|
-
## Prerelease Lanes
|
|
24
|
-
|
|
25
|
-
Use `repo release pre enter <tag>`, `repo release pre publish`, and `repo release pre exit` for alpha, beta, rc, or next lanes.
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
# Husky
|
|
2
|
-
|
|
3
|
-
Husky connects repository scripts to Git hooks. repoctl-managed workspaces use it as a thin entrypoint, keeping verification logic in versioned commands.
|
|
4
|
-
|
|
5
|
-
```sh
|
|
6
|
-
# .husky/pre-commit
|
|
7
|
-
pnpm exec repo verify pre-commit
|
|
8
|
-
```
|
|
9
|
-
|
|
10
|
-
Use `commit-msg` for commitlint and `pre-push` for broader build and test verification. Hooks should remain fast enough for local work and should not contain duplicated task logic.
|
|
11
|
-
|
|
12
|
-
`repo doctor` reports when Husky and lint-staged are only partially configured. `repo upgrade` can synchronize the managed defaults.
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
# lint-staged
|
|
2
|
-
|
|
3
|
-
lint-staged runs checks only for files included in the next commit.
|
|
4
|
-
|
|
5
|
-
The repository policy routes JavaScript, TypeScript, and Vue files through ESLint, style files through Stylelint, and TypeScript or Vue files to the owning workspace's typecheck script.
|
|
6
|
-
|
|
7
|
-
```bash
|
|
8
|
-
pnpm exec repo verify pre-commit
|
|
9
|
-
pnpm exec repo verify staged-typecheck <files...>
|
|
10
|
-
```
|
|
11
|
-
|
|
12
|
-
Vue workspaces should use `vue-tsc`; plain TypeScript workspaces should use `tsc`. Keep the routing in `lint-staged.config.js` so local hooks and CI can share the same contract.
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
# pnpm
|
|
2
|
-
|
|
3
|
-
pnpm owns workspace discovery, dependency installation, script execution, and versioning configuration.
|
|
4
|
-
|
|
5
|
-
```bash
|
|
6
|
-
pnpm install
|
|
7
|
-
pnpm --filter <package> build
|
|
8
|
-
pnpm -r test
|
|
9
|
-
pnpm change
|
|
10
|
-
pnpm change status
|
|
11
|
-
```
|
|
12
|
-
|
|
13
|
-
`pnpm-workspace.yaml` is the source of truth for package patterns and release groups. repoctl can diagnose missing patterns and synchronize recommended defaults, but pnpm remains the package manager.
|
|
14
|
-
|
|
15
|
-
Prefer exact workspace filters in automation and keep `packageManager` plus `engines.node` declared at the repository root.
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
# Renovate
|
|
2
|
-
|
|
3
|
-
Renovate opens dependency update pull requests according to repository policy.
|
|
4
|
-
|
|
5
|
-
Group related tooling updates, respect pnpm workspace constraints, and let the normal build, lint, typecheck, tsd, and test matrix validate each update. Avoid combining unrelated runtime and tooling upgrades when separate review makes regressions easier to isolate.
|
|
6
|
-
|
|
7
|
-
repoctl does not replace Renovate. It provides the diagnostic and verification commands that Renovate pull requests can run consistently.
|
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
# Turborepo
|
|
2
|
-
|
|
3
|
-
Turborepo runs the monorepo task graph and caches repeatable work.
|
|
4
|
-
|
|
5
|
-
```bash
|
|
6
|
-
pnpm build
|
|
7
|
-
pnpm lint
|
|
8
|
-
pnpm typecheck
|
|
9
|
-
pnpm test
|
|
10
|
-
```
|
|
11
|
-
|
|
12
|
-
Root scripts delegate to `turbo run`. Package scripts define the actual build, lint, typecheck, and test commands; `turbo.json` defines dependencies, inputs, outputs, and cache behavior.
|
|
13
|
-
|
|
14
|
-
Mark generated artifacts as task outputs and declare upstream dependencies such as `build` before tests that consume built packages.
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
https://repo.icebreaker.top/
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
https://repo.icebreaker.top/
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
# Reusing JavaScript Code
|
|
2
|
-
|
|
3
|
-
JavaScript code can be shared through source modules, workspace packages, or published npm packages. The right boundary depends on ownership and consumers.
|
|
4
|
-
|
|
5
|
-
- Use a local module for code owned by one package.
|
|
6
|
-
- Use a workspace package when multiple projects in the same repository share versioned behavior.
|
|
7
|
-
- Publish an npm package when external repositories need a stable public API.
|
|
8
|
-
|
|
9
|
-
In a pnpm workspace, declare internal dependencies with the `workspace:` protocol and let the package build produce explicit runtime and type entrypoints.
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
# JavaScript Module Extensions
|
|
2
|
-
|
|
3
|
-
Node.js uses file extensions and the nearest `package.json` `type` field to determine module format.
|
|
4
|
-
|
|
5
|
-
| Extension | Meaning |
|
|
6
|
-
| --------------- | --------------------------------------------- |
|
|
7
|
-
| `.mjs` | Always ES module |
|
|
8
|
-
| `.cjs` | Always CommonJS |
|
|
9
|
-
| `.js` | Depends on `package.json` `type` |
|
|
10
|
-
| `.mts` / `.cts` | TypeScript source with explicit module intent |
|
|
11
|
-
|
|
12
|
-
For published libraries, make the package `exports` map explicit and test both import and require paths when both formats are supported.
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
# ESM and CommonJS Runtime Globals
|
|
2
|
-
|
|
3
|
-
CommonJS provides `require`, `module`, `exports`, `__filename`, and `__dirname`. ES modules use `import`, `export`, `import.meta.url`, and `createRequire` when interoperability is required.
|
|
4
|
-
|
|
5
|
-
Avoid assuming CommonJS globals exist inside ESM. Resolve file paths with `fileURLToPath(import.meta.url)` and prefer static imports so bundlers and type checkers can understand dependencies.
|
|
6
|
-
|
|
7
|
-
See [ESM vs CommonJS](./modern/esm-vs-cjs.md) for package-level guidance.
|
|
@@ -1,5 +0,0 @@
|
|
|
1
|
-
# Bundlers
|
|
2
|
-
|
|
3
|
-
Library bundlers turn source modules into publishable runtime and declaration artifacts. The repository's TypeScript library asset uses [tsdown](https://github.com/sonofmagic/repoctl/tree/main/templates/tsdown), while the Vue library asset adds Vue-specific build and type checking.
|
|
4
|
-
|
|
5
|
-
Configure entrypoints, external dependencies, output formats, source maps, and declarations according to the package contract. Applications and libraries have different goals: application builds optimize deployment; library builds preserve reusable public boundaries.
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
# Type Declarations
|
|
2
|
-
|
|
3
|
-
Type declarations are part of a TypeScript package's public API.
|
|
4
|
-
|
|
5
|
-
Generate `.d.ts` files from the same source revision as runtime output, point `types` and export conditions at files included in the tarball, and use `tsd` tests for important inference and error behavior.
|
|
6
|
-
|
|
7
|
-
Declaration bundling can simplify public output, but it must preserve module augmentation, generics, and referenced types. Always inspect the packed artifact rather than testing source imports alone.
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
# ESM vs CommonJS
|
|
2
|
-
|
|
3
|
-
ES modules are the preferred format for new packages. CommonJS remains relevant when consumers or toolchains still require `require()`.
|
|
4
|
-
|
|
5
|
-
Choose ESM-only when your supported runtime matrix allows it. Publish dual formats only when the compatibility benefit justifies duplicate builds and interop testing.
|
|
6
|
-
|
|
7
|
-
For dual packages, map `import`, `require`, and `types` conditions explicitly and test each consumer path. Avoid exporting different logical module instances from the two formats.
|
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
# Modern Package Guide
|
|
2
|
-
|
|
3
|
-
Modern packages should expose a small, explicit API and generate artifacts that match their declared contract.
|
|
4
|
-
|
|
5
|
-
## Checklist
|
|
6
|
-
|
|
7
|
-
- Choose ESM-only or intentional dual-package support.
|
|
8
|
-
- Declare every public subpath in `exports`.
|
|
9
|
-
- Emit and test type declarations.
|
|
10
|
-
- Keep development-only files out of the package tarball.
|
|
11
|
-
- Validate the supported Node and bundler matrix.
|
|
12
|
-
- Record public changes through repository versioning.
|
|
13
|
-
|
|
14
|
-
Start with [ESM vs CommonJS](./esm-vs-cjs.md), then review [entry points](./package-entry-points.md) and [declarations](./dts.md).
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
# Package Entry Points
|
|
2
|
-
|
|
3
|
-
Use the `exports` field to define the package's supported public paths.
|
|
4
|
-
|
|
5
|
-
```json
|
|
6
|
-
{
|
|
7
|
-
"exports": {
|
|
8
|
-
".": {
|
|
9
|
-
"types": "./dist/index.d.ts",
|
|
10
|
-
"import": "./dist/index.js"
|
|
11
|
-
},
|
|
12
|
-
"./package.json": "./package.json"
|
|
13
|
-
}
|
|
14
|
-
}
|
|
15
|
-
```
|
|
16
|
-
|
|
17
|
-
Do not rely on consumers reaching into undeclared internal files. Every exported path should have runtime output, types where applicable, and a compatibility test.
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
# TypeScript Packages
|
|
2
|
-
|
|
3
|
-
Use TypeScript to validate source and to publish a precise consumer contract.
|
|
4
|
-
|
|
5
|
-
Keep the source typecheck separate from artifact generation, enable strict settings appropriate for libraries, and avoid path aliases that cannot be resolved by consumers. Vue packages should run `vue-tsc`; non-Vue TypeScript packages should run `tsc`.
|
|
6
|
-
|
|
7
|
-
Public type behavior belongs in `tsd` tests. Runtime tests should import built output so module resolution matches delivery.
|
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
# Publishing An npm Package
|
|
2
|
-
|
|
3
|
-
1. Define explicit runtime and type entrypoints.
|
|
4
|
-
2. Build the package and run tests against built artifacts.
|
|
5
|
-
3. Inspect `pnpm pack` output.
|
|
6
|
-
4. Record a change intent and verify the version plan.
|
|
7
|
-
5. Publish with provenance and the intended access level.
|
|
8
|
-
|
|
9
|
-
```bash
|
|
10
|
-
pnpm build
|
|
11
|
-
pnpm lint
|
|
12
|
-
pnpm typecheck
|
|
13
|
-
pnpm tsd
|
|
14
|
-
pnpm test
|
|
15
|
-
pnpm pack
|
|
16
|
-
pnpm change
|
|
17
|
-
```
|
|
18
|
-
|
|
19
|
-
Never publish template source workspaces that are intentionally marked `private: true`.
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
# What Is An npm Package?
|
|
2
|
-
|
|
3
|
-
An npm package is a directory described by `package.json`. It can expose runtime code, types, command-line bins, assets, or configuration.
|
|
4
|
-
|
|
5
|
-
The public contract includes the package name, version, `exports`, `types`, `bin`, supported runtimes, files included in the tarball, and semantic versioning behavior. Treat these fields as API design, not publishing metadata afterthoughts.
|
|
6
|
-
|
|
7
|
-
Use `pnpm pack` to inspect the exact artifact before publishing.
|
|
@@ -1,40 +0,0 @@
|
|
|
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)。
|
|
@@ -1,50 +0,0 @@
|
|
|
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) |
|
|
@@ -1,88 +0,0 @@
|
|
|
1
|
-
# 我对 monorepo 的一些思考
|
|
2
|
-
|
|
3
|
-
## 前言
|
|
4
|
-
|
|
5
|
-
最近在自己的新项目中,我创建并使用了 [monorepo-template](https://github.com/sonofmagic/monorepo-template) 模板,并不断地做了不少改进。
|
|
6
|
-
|
|
7
|
-
在此,我想借此机会分享一下这个模板的演变过程,以及我对 `monorepo` 的一些思考。
|
|
8
|
-
|
|
9
|
-
## 它的由来
|
|
10
|
-
|
|
11
|
-
为了应对越来越多的发包场景,我创建了 [npm-lib-template](https://github.com/sonofmagic/npm-lib-template) 模板
|
|
12
|
-
|
|
13
|
-
这是一个 `git` 单仓单 `npm` 包模板,使用 `rollup` 进行打包,然后再发布到 `npm` 和 `github`
|
|
14
|
-
|
|
15
|
-
然而,在后续开发中,我发现单仓库的模式在某些场景下难以应对。
|
|
16
|
-
|
|
17
|
-
例如,当需要引用其他自己的包,进行单元测试并再次发包时,这时候往往要在多个项目之间进行来回的切换更改,管理复杂度会迅速上升。
|
|
18
|
-
|
|
19
|
-
`git submodule` 也是另外一条路子,但是我对每次都要同步 `hash` 感到深恶痛绝,遂放弃 (不过某些极其特殊场景的实现,还是只能利用这个功能)。
|
|
20
|
-
|
|
21
|
-
因此,我决定要创建一个 [monorepo 项目模板](https://github.com/sonofmagic/monorepo-template) ,以应对这些需求。
|
|
22
|
-
|
|
23
|
-
## 技术选型
|
|
24
|
-
|
|
25
|
-
### 管理工具
|
|
26
|
-
|
|
27
|
-
在 `monorepo` 的管理上,我选择了 `pnpm` 和 `turborepo` 这对组合,原因很简单:它们都非常快。
|
|
28
|
-
|
|
29
|
-
- `pnpm` 又可以节省磁盘空间,又能够链接自特定的内容寻址存储库,是为快也
|
|
30
|
-
- `turborepo` 有构建缓存,是为快也 `too`.
|
|
31
|
-
|
|
32
|
-
### 语言与打包
|
|
33
|
-
|
|
34
|
-
我选择使用纯 `TypeScript` 来编写所有类库项目,并统一使用 `tsdown` 进行打包,默认输出格式为 `cjs` 和 `esm`,并利用 `package.json` 中的 `exports` 字段进行分发。
|
|
35
|
-
|
|
36
|
-
### 直接调试
|
|
37
|
-
|
|
38
|
-
在直接调试时,我抛弃了 `dist` + `sourcemap` 的调试方式,使用了 `tsx`,它非常适合调试 `TypeScript` 编写的 `CLI` 项目。
|
|
39
|
-
|
|
40
|
-
### 测试框架
|
|
41
|
-
|
|
42
|
-
测试方面,我选择了 `vitest`。
|
|
43
|
-
|
|
44
|
-
它不仅速度快,还很好地支持 `cjs`、`esm` 和 `TypeScript`,同时也适合 `monorepo` 项目。你可以利用 `turbo` 来执行单个的 `vitest` 任务,也可以利用 `vitest.workspace` 来进行多任务测试。
|
|
45
|
-
|
|
46
|
-
最初我使用的是 `jest` + `ts-jest`,但它对多格式的混合模块的支持不够理想,最终我选择了 `vitest`。
|
|
47
|
-
|
|
48
|
-
### 代码规范与质量控制
|
|
49
|
-
|
|
50
|
-
为了保持代码质量,我使用了 `eslint` 和 `stylelint`,并基于自己的配置包 `@icebreakers/eslint-config` 和 `@icebreakers/stylelint-config` 来进行代码格式化和规范化。
|
|
51
|
-
|
|
52
|
-
我还为 `.vscode` 配置了一些推荐插件和编辑器选项。
|
|
53
|
-
|
|
54
|
-
此外,通过 `husky` 添加了 `git hook`,配合 `lint-staged` 对提交的代码进行校验。与 `commitlint` 结合使用,以确保 `git` 提交信息符合规范。
|
|
55
|
-
|
|
56
|
-
### 本地引用与发包替换
|
|
57
|
-
|
|
58
|
-
利用 `publishConfig` 会在发包的时候替换 `package.json` 字段的方式,在本地包相互引用的时候,都使用 `Typescript` 源文件的方式导出,在 `publishConfig` 里定义的导出为,真正在不同环境中,指向 `dist` 中不同格式的产物地址。
|
|
59
|
-
|
|
60
|
-
通过这种方式,可以大大加速整个 `monorepo` 的开发测试速度,避免反复通过 `watch` 来构建 `dist` 和 `sourcemap`,也避免一构建出产物,对应的 `Typescript` 文件,就报错的问题。
|
|
61
|
-
|
|
62
|
-
### 发包流程
|
|
63
|
-
|
|
64
|
-
现在使用 pnpm 原生 versioning:用 `pnpm change` 记录意图,用 `pnpm version -r` 生成版本和 changelog,再用 `pnpm publish -r` 发布。版本计划保留在 `.changeset/ledger.yaml`,预发布则由 pnpm lanes 管理。
|
|
65
|
-
|
|
66
|
-
### Github 相关配置
|
|
67
|
-
|
|
68
|
-
在 `.github` 目录下,我提供了默认的 `CI/CD` 流程配置,以及用户提交 `issue` 时的模板。经过少量配置后,就可以实现自动发布 `npm` 包、创建 `git tag` 以及生成 `GitHub release`。
|
|
69
|
-
|
|
70
|
-
此外,模板里还有许多为 `GitHub` 显示优化的 `md` 文档。
|
|
71
|
-
|
|
72
|
-
## 部署
|
|
73
|
-
|
|
74
|
-
文档网站通过 `netlify.toml` 配置部署在 `Netlify` 上。最初我使用的是 `Vercel`,但由于**国内**访问速度的原因,最终迁移到了 `Netlify`。
|
|
75
|
-
|
|
76
|
-
而且由于我是开源项目贡献者的原因,`Netlify` 为我 `免费` 提供了 `Pro` 版本的计划 (通常这需要 `$19/per member/month`)
|
|
77
|
-
|
|
78
|
-
感谢 `Netlify`! 爱你❤️😍。
|
|
79
|
-
|
|
80
|
-
如果看到这里的哥们,你也有一定影响力的开源项目,也可以通过下方的链接申请。
|
|
81
|
-
|
|
82
|
-
https://www.netlify.com/legal/open-source-policy/
|
|
83
|
-
|
|
84
|
-
## 总结
|
|
85
|
-
|
|
86
|
-
从单仓到 `monorepo` 的转变不仅仅是对工具的选择,更是对项目管理模式的优化。通过采用合适的工具链,能够更高效地管理多包项目的同时,利用 `CI/CD` 确保代码的质量和发布的顺畅。
|
|
87
|
-
|
|
88
|
-
希望这些思考对你有所帮助,也欢迎大家提出各种建议和意见。
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
https://repo.icebreaker.top/
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
https://repo.icebreaker.top/
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
# 从 0 到 1 构建 monorepo
|
|
File without changes
|
|
File without changes
|
|
File without changes
|