component-auto-docs 0.1.0 → 0.1.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 CHANGED
@@ -30,7 +30,7 @@ pnpm exec component-auto-docs check
30
30
 
31
31
  ## 命令说明
32
32
 
33
- - `scaffold`:向当前项目复制 `docs.config.mjs`、`src/docs/runtime/*`、`src/docs/index.vue` 和文档接入说明,并向 `package.json` 写入 `docs:init`、`docs:gen`、`docs:check`、`docs:dev` 脚本。
33
+ - `scaffold`:向当前项目复制 `docs.config.mjs`、`src/docs/runtime/*`、`src/docs/index.vue` 和文档接入说明,并向 `package.json` 写入 `docs:scaffold`、`docs:init`、`docs:gen`、`docs:check`、`docs:dev` 脚本。
34
34
  - `init`:初始化或补齐组件的 `docs.meta.json`、自动文档页、文档入口路由和组件文档路由。
35
35
  - `gen`:生成 Markdown 文档、AI catalog、页面数据和质量报告。
36
36
  - `check`:执行生成流程,并在质量报告存在 error 时以非 0 状态退出,适合放进 CI。
package/SHARING.md ADDED
@@ -0,0 +1,435 @@
1
+ # component-auto-docs 分享文档
2
+
3
+ ## 分享主题
4
+
5
+ 用 `component-auto-docs` 建立多项目可复用的组件文档自动化体系。
6
+
7
+ 这套工具面向 uni-app 组件库项目,目标是把组件 API 文档、App 内组件预览页、AI 结构化索引和文档质量校验统一自动生成,减少手写文档成本,也让多个项目之间的组件资产沉淀方式保持一致。
8
+
9
+ ## 一句话介绍
10
+
11
+ `component-auto-docs` 是一个组件文档自动化 CLI。它会从组件源码中自动抽取 `defineProps`、`defineEmits`、slots、JSDoc 和类型信息,再结合人工维护的 `docs.meta.json`,生成面向开发者、业务项目和 AI 检索的多种文档产物。
12
+
13
+ ## 背景问题
14
+
15
+ 在多个 uni-app 项目里,组件文档通常会遇到这些问题:
16
+
17
+ - 文档依赖人工维护,容易缺失、过期或和源码不一致。
18
+ - 组件 API、示例、使用场景散落在 README、代码注释和口头约定里。
19
+ - 新人接入组件库时,只知道组件名,不知道何时使用、如何组合、有哪些注意事项。
20
+ - 多项目组件库的文档风格不统一,后续想做组件治理、搜索、AI 推荐时缺少统一数据结构。
21
+ - 组件新增或 API 变更后,缺少质量门禁来提醒文档同步。
22
+
23
+ 所以这套方案的核心思路不是单纯“生成 Markdown”,而是把组件文档变成一个可自动化、可校验、可检索、可跨项目复用的数据体系。
24
+
25
+ ## 设计目标
26
+
27
+ 1. **自动抽取 API** 从组件源码里抽取 props、events、slots、类型别名、默认值、必填项和 JSDoc,减少重复手写。
28
+
29
+ 2. **保留人工语义** API 可以自动生成,但业务语义、适用场景、避坑说明和高质量示例仍然需要人来补充,所以每个组件保留 `docs.meta.json`。
30
+
31
+ 3. **多种产物一次生成** 同一份组件知识同时生成 Markdown、App 内文档页数据、AI catalog、llms 文本索引和质量报告。
32
+
33
+ 4. **多项目配置化** 不把目录、别名、路由写死在脚本里,通过 `docs.config.mjs` 适配不同项目。
34
+
35
+ 5. **质量可检查** 通过 `component-auto-docs check` 输出质量报告,并在有 error 时返回非 0 状态,便于接入 CI。
36
+
37
+ 6. **显式初始化,不静默污染项目** 安装 npm 包不会自动改项目文件。需要执行 `component-auto-docs scaffold` 才会复制模板和补脚本,动作可控。
38
+
39
+ ## 整体架构
40
+
41
+ ```text
42
+ 组件源码 + docs.meta.json
43
+ |
44
+ v
45
+ component-auto-docs CLI
46
+ |
47
+ +-- scaffold: 复制配置和文档页运行时模板
48
+ +-- init: 初始化 meta、文档页、pages.json 路由
49
+ +-- gen: 生成文档数据和索引
50
+ +-- check: 生成并校验质量报告
51
+ |
52
+ v
53
+ 文档产物
54
+ - docs/components/*.md
55
+ - docs/ai/components.catalog.json
56
+ - docs/ai/components.index.md
57
+ - docs/ai/llms.txt
58
+ - docs/ai/components.quality.json
59
+ - src/docs/data.json
60
+ - src/docs/components/*/data.json
61
+ - src/docs/components/*/index.vue
62
+ ```
63
+
64
+ ## 核心产物
65
+
66
+ ### 1. 开发者阅读文档
67
+
68
+ 生成位置:
69
+
70
+ ```text
71
+ docs/components/*.md
72
+ ```
73
+
74
+ 用途:
75
+
76
+ - 给开发者快速查看组件 API。
77
+ - 作为组件库文档的静态 Markdown 版本。
78
+ - 适合被代码仓库、知识库或内部平台直接索引。
79
+
80
+ ### 2. App 内组件文档页
81
+
82
+ 生成位置:
83
+
84
+ ```text
85
+ src/docs/data.json
86
+ src/docs/components/*/data.json
87
+ src/docs/components/*/index.vue
88
+ ```
89
+
90
+ 用途:
91
+
92
+ - 在 uni-app 项目里打开 `/docs/index` 查看组件列表。
93
+ - 每个组件有独立页面,可展示真实组件预览、Props 控制面板、示例代码、使用建议和注意事项。
94
+ - 适合测试组件视觉状态,也适合给业务同学或新人演示组件能力。
95
+
96
+ ### 3. AI 和检索索引
97
+
98
+ 生成位置:
99
+
100
+ ```text
101
+ docs/ai/components.catalog.json
102
+ docs/ai/components.index.md
103
+ docs/ai/llms.txt
104
+ ```
105
+
106
+ 用途:
107
+
108
+ - `components.catalog.json` 是最重要的结构化数据源。
109
+ - 可以给 AI 助手、组件搜索、组件推荐、跨项目组件治理使用。
110
+ - `llms.txt` 和 `components.index.md` 是更适合文本检索和大模型阅读的摘要版本。
111
+
112
+ ### 4. 质量报告
113
+
114
+ 生成位置:
115
+
116
+ ```text
117
+ docs/ai/components.quality.json
118
+ ```
119
+
120
+ 会检查:
121
+
122
+ - 组件是否缺少标题、分类、描述。
123
+ - 是否缺少示例。
124
+ - 源码文件是否存在。
125
+ - App 内文档页是否存在。
126
+ - JSDoc 里的 `@property` 是否和 `defineProps` 匹配。
127
+ - JSDoc 里的 `@event` 是否和 `defineEmits` 匹配。
128
+ - `related` 组件是否真实存在、是否也已被文档化。
129
+
130
+ ## 使用方式
131
+
132
+ ### 1. 安装
133
+
134
+ 发布到 npm 后,在目标项目执行:
135
+
136
+ ```bash
137
+ pnpm add -D component-auto-docs
138
+ ```
139
+
140
+ ### 2. 初始化模板
141
+
142
+ ```bash
143
+ pnpm exec component-auto-docs scaffold
144
+ ```
145
+
146
+ 这一步会复制:
147
+
148
+ ```text
149
+ docs.config.mjs
150
+ docs/components/README.md
151
+ src/docs/index.vue
152
+ src/docs/runtime/component-doc-page.vue
153
+ src/docs/runtime/use-auto-component-doc.ts
154
+ ```
155
+
156
+ 同时会向 `package.json` 写入:
157
+
158
+ ```json
159
+ {
160
+ "scripts": {
161
+ "docs:scaffold": "component-auto-docs scaffold",
162
+ "docs:init": "component-auto-docs init",
163
+ "docs:gen": "component-auto-docs gen",
164
+ "docs:check": "component-auto-docs check",
165
+ "docs:dev": "pnpm docs:gen && DOCS_OPEN_PATH='/#/docs/index' uni --mode development"
166
+ }
167
+ }
168
+ ```
169
+
170
+ 已有文件默认不覆盖。如果要覆盖模板:
171
+
172
+ ```bash
173
+ pnpm exec component-auto-docs scaffold --force
174
+ ```
175
+
176
+ 如果不想自动写 `package.json`:
177
+
178
+ ```bash
179
+ pnpm exec component-auto-docs scaffold --no-scripts
180
+ ```
181
+
182
+ ### 3. 调整配置
183
+
184
+ 默认配置文件是:
185
+
186
+ ```text
187
+ docs.config.mjs
188
+ ```
189
+
190
+ 典型配置:
191
+
192
+ ```js
193
+ export default {
194
+ projectName: 'your-project-name',
195
+ componentRoot: 'src/components',
196
+ metaFileName: 'docs.meta.json',
197
+ output: {
198
+ aiDir: 'docs/ai',
199
+ markdownDir: 'docs/components',
200
+ pageDataRoot: 'src/docs/components',
201
+ indexDataFile: 'src/docs/data.json',
202
+ catalogFile: 'components.catalog.json',
203
+ aiIndexFile: 'components.index.md',
204
+ llmsFile: 'llms.txt',
205
+ qualityFile: 'components.quality.json',
206
+ },
207
+ routes: {
208
+ enabled: true,
209
+ pagesJson: 'src/pages.json',
210
+ indexPath: 'docs/index',
211
+ indexTitle: '组件文档',
212
+ basePath: 'docs/components',
213
+ insertBeforeMarker: ' // -- 示例 demo --',
214
+ titleSuffix: ' 文档',
215
+ },
216
+ runtime: {
217
+ componentDocPageImport: '@/docs/runtime/component-doc-page.vue',
218
+ autoDocHookImport: '@/docs/runtime/use-auto-component-doc',
219
+ componentImportBase: '@/components',
220
+ componentDocPageName: 'ComponentDocPage',
221
+ autoDocHookName: 'useAutoComponentDoc',
222
+ },
223
+ quality: {
224
+ requireDocPage: true,
225
+ shellHints: ['<ComponentDocPage', '<app-page', '<AppPage'],
226
+ },
227
+ };
228
+ ```
229
+
230
+ 如果项目只需要 Markdown 和 AI catalog,不需要 App 内文档页,可以关闭路由和页面检查:
231
+
232
+ ```js
233
+ export default {
234
+ routes: {
235
+ enabled: false,
236
+ },
237
+ quality: {
238
+ requireDocPage: false,
239
+ },
240
+ };
241
+ ```
242
+
243
+ ### 4. 初始化组件文档
244
+
245
+ ```bash
246
+ pnpm docs:init
247
+ ```
248
+
249
+ 这一步会:
250
+
251
+ - 扫描 `componentRoot` 下的所有组件。
252
+ - 为组件创建或补齐 `docs.meta.json`。
253
+ - 创建自动交互文档页 `src/docs/components/*/index.vue`。
254
+ - 写入文档入口路由 `docs/index`。
255
+ - 写入组件文档路由 `docs/components/*/index`。
256
+
257
+ ### 5. 生成文档
258
+
259
+ ```bash
260
+ pnpm docs:gen
261
+ ```
262
+
263
+ 这一步会生成:
264
+
265
+ - Markdown 文档。
266
+ - AI catalog。
267
+ - App 内文档页数据。
268
+ - 质量报告。
269
+
270
+ ### 6. 校验文档质量
271
+
272
+ ```bash
273
+ pnpm docs:check
274
+ ```
275
+
276
+ 建议放进 CI 或提测前检查。质量报告有 error 时,命令会以非 0 状态退出。
277
+
278
+ ## docs.meta.json 的职责
279
+
280
+ 组件源码负责提供 API 真相,`docs.meta.json` 负责提供业务语义。
281
+
282
+ 示例:
283
+
284
+ ```json
285
+ {
286
+ "title": "按钮",
287
+ "category": "基础组件",
288
+ "description": "用于触发页面动作、提交表单、打开小程序开放能力或承载轻量链接操作的通用按钮。",
289
+ "useWhen": [
290
+ "需要用户明确触发一个主要或次要操作时。",
291
+ "需要统一项目内按钮尺寸、圆角、颜色和点击节流行为时。"
292
+ ],
293
+ "avoidWhen": [
294
+ "只展示静态文本,不需要用户点击反馈时。",
295
+ "需要复杂输入、选择或表单校验能力时,应使用对应表单组件。"
296
+ ],
297
+ "related": ["app-input", "app-pop", "app-dialog"],
298
+ "notes": [
299
+ "click 事件默认带节流,连续点击时只响应一次。",
300
+ "新增按钮视觉类型时,应同步维护类型定义。"
301
+ ],
302
+ "examples": [
303
+ {
304
+ "title": "基础按钮",
305
+ "description": "使用默认主按钮样式触发提交动作。",
306
+ "code": "<app-button @click=\"onSubmit\">提交</app-button>"
307
+ }
308
+ ]
309
+ }
310
+ ```
311
+
312
+ 这样设计的好处是:
313
+
314
+ - API 不靠人抄,减少过期。
315
+ - 业务语义由人补充,保留表达质量。
316
+ - 后续 AI 推荐组件时,既能理解 API,也能理解使用场景。
317
+
318
+ ## 工作原理
319
+
320
+ ### 1. 源码解析
321
+
322
+ 生成器会读取组件 `.vue` 文件中的 `<script setup>` 和 `<template>`:
323
+
324
+ - 从 `defineProps` 抽取 prop 名称、类型、默认值、是否必填。
325
+ - 从 `defineEmits` 抽取事件名。
326
+ - 从 `<slot>` 标签抽取插槽。
327
+ - 从 JSDoc 抽取描述、`@property`、`@event` 和 `@example`。
328
+ - 从组件目录下的 `.ts` 文件抽取类型别名和字符串联合类型。
329
+
330
+ ### 2. 元数据合并
331
+
332
+ 如果组件已有 `docs.meta.json`,生成器会保留人工内容,只补齐缺失字段。
333
+
334
+ 如果组件没有 `docs.meta.json`,`init` 会根据组件名、JSDoc、props、events 和 slots 推导一份初始元数据。
335
+
336
+ ### 3. 页面生成
337
+
338
+ `init` 会为每个组件生成一个默认交互文档页。页面默认使用:
339
+
340
+ ```text
341
+ src/docs/runtime/component-doc-page.vue
342
+ src/docs/runtime/use-auto-component-doc.ts
343
+ ```
344
+
345
+ 默认页面能力:
346
+
347
+ - 展示组件标题、分类、描述。
348
+ - 渲染真实组件预览。
349
+ - 根据 props 自动生成控制面板。
350
+ - 根据当前控制值生成代码片段。
351
+ - 展示使用建议、注意事项和示例代码。
352
+
353
+ 如果某个组件需要更精细的业务示例,可以直接编辑对应的:
354
+
355
+ ```text
356
+ src/docs/components/<component-name>/index.vue
357
+ ```
358
+
359
+ `docs:init` 默认不会覆盖自定义页面,只会刷新带有自动生成标记的页面。
360
+
361
+ ### 4. 路由生成
362
+
363
+ `init` 会根据 `docs.config.mjs` 写入 `pages.json`:
364
+
365
+ ```json
366
+ {
367
+ "path": "docs/index",
368
+ "style": {
369
+ "navigationBarTitleText": "组件文档"
370
+ }
371
+ }
372
+ ```
373
+
374
+ 以及:
375
+
376
+ ```json
377
+ {
378
+ "path": "docs/components/app-button/index",
379
+ "style": {
380
+ "navigationBarTitleText": "app-button 文档"
381
+ }
382
+ }
383
+ ```
384
+
385
+ ### 5. 多端产物生成
386
+
387
+ `gen` 会把同一份组件知识输出成多类产物:
388
+
389
+ - Markdown 面向人。
390
+ - JSON catalog 面向工具、AI 和检索。
391
+ - 页面数据面向 App 内文档页。
392
+ - quality report 面向质量门禁。
393
+
394
+ ## npm 包结构
395
+
396
+ ```text
397
+ component-auto-docs
398
+ ├─ bin/component-auto-docs.mjs
399
+ ├─ core/generate-component-docs.mjs
400
+ ├─ templates/docs.config.mjs
401
+ ├─ templates/docs/components/README.md
402
+ ├─ templates/src/docs/index.vue
403
+ ├─ templates/src/docs/runtime/component-doc-page.vue
404
+ ├─ templates/src/docs/runtime/use-auto-component-doc.ts
405
+ ├─ README.md
406
+ └─ package.json
407
+ ```
408
+
409
+ 职责划分:
410
+
411
+ - `bin/component-auto-docs.mjs`:CLI 入口,负责命令分发和 scaffold。
412
+ - `core/generate-component-docs.mjs`:核心生成器,负责源码解析、元数据合并、文档生成和质量检查。
413
+ - `templates/*`:跨项目复制的配置和页面运行时模板。
414
+
415
+ ## 团队收益
416
+
417
+ 1. **降低文档维护成本** API 从源码抽取,减少重复劳动。
418
+
419
+ 2. **降低组件使用门槛** 新人可以通过 App 内文档页和 Markdown 快速理解组件。
420
+
421
+ 3. **提高文档一致性** 多项目共享同一套生成规则和数据结构。
422
+
423
+ 4. **支持 AI 和检索** `components.catalog.json` 可以作为 AI 助手理解组件库的标准数据源。
424
+
425
+ 5. **支持质量门禁** 文档质量可以通过 `docs:check` 自动检查。
426
+
427
+ 6. **支持组件治理** 后续可以基于 catalog 统计组件数量、分类、API 完整度、相关组件关系等。
428
+
429
+ ## 注意事项
430
+
431
+ - `pnpm exec component-auto-docs` 只有在包安装成功后才可用。
432
+ - 项目使用 pnpm 时,要确保 pnpm 版本和当前 `node_modules` 使用的 store 版本一致。
433
+ - `scaffold` 默认不覆盖已有模板文件,避免误伤项目内定制内容。
434
+ - `docs.meta.json` 不建议完全依赖自动生成,核心组件需要人工补充高质量示例和业务语义。
435
+ - 如果目标项目不需要 App 内文档页,可以关闭 `routes.enabled` 和 `quality.requireDocPage`。
@@ -66,6 +66,7 @@ function addPackageScripts(options) {
66
66
  packageJson.scripts ||= {};
67
67
 
68
68
  const scripts = {
69
+ 'docs:scaffold': 'component-auto-docs scaffold',
69
70
  'docs:init': 'component-auto-docs init',
70
71
  'docs:gen': 'component-auto-docs gen',
71
72
  'docs:check': 'component-auto-docs check',
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "component-auto-docs",
3
- "version": "0.1.0",
3
+ "version": "0.1.1",
4
4
  "description": "Component docs automation CLI for uni-app component libraries.",
5
5
  "type": "module",
6
6
  "bin": {
@@ -69,7 +69,7 @@ pnpm exec component-auto-docs gen
69
69
  pnpm exec component-auto-docs check
70
70
  ```
71
71
 
72
- `scaffold` 会复制 `docs.config.mjs`、`src/docs/runtime/*`、`src/docs/index.vue` 和本文档规范,并向 `package.json` 写入 `docs:init`、`docs:gen`、`docs:check`、`docs:dev` 脚本。已有文件默认跳过;如需覆盖模板文件和脚本,可使用:
72
+ `scaffold` 会复制 `docs.config.mjs`、`src/docs/runtime/*`、`src/docs/index.vue` 和本文档规范,并向 `package.json` 写入 `docs:scaffold`、`docs:init`、`docs:gen`、`docs:check`、`docs:dev` 脚本。已有文件默认跳过;如需覆盖模板文件和脚本,可使用:
73
73
 
74
74
  ```bash
75
75
  pnpm exec component-auto-docs scaffold --force