create-lumfall 1.0.0 → 1.0.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.
Files changed (34) hide show
  1. package/cli.js +2 -2
  2. package/package.json +1 -1
  3. package/templates/document/README.md +21 -108
  4. package/templates/document/app/pages/docs/docs-config.js +23 -109
  5. package/templates/document/docs/guide/example.md +41 -0
  6. package/templates/document/docs/guide/introduction.md +20 -44
  7. package/templates/document/docs/advanced/dashboard.md +0 -66
  8. package/templates/document/docs/advanced/health.md +0 -72
  9. package/templates/document/docs/advanced/monitoring.md +0 -60
  10. package/templates/document/docs/advanced/security.md +0 -88
  11. package/templates/document/docs/core/app-instance.md +0 -114
  12. package/templates/document/docs/core/controller-service.md +0 -113
  13. package/templates/document/docs/core/lifecycle.md +0 -60
  14. package/templates/document/docs/core/middleware.md +0 -83
  15. package/templates/document/docs/core/plugins.md +0 -77
  16. package/templates/document/docs/core/router-schema.md +0 -102
  17. package/templates/document/docs/dsl/api-contract.md +0 -88
  18. package/templates/document/docs/dsl/extend.md +0 -311
  19. package/templates/document/docs/dsl/menu.md +0 -101
  20. package/templates/document/docs/dsl/model-project.md +0 -122
  21. package/templates/document/docs/dsl/overview.md +0 -116
  22. package/templates/document/docs/dsl/reference.md +0 -175
  23. package/templates/document/docs/dsl/schema-actions.md +0 -135
  24. package/templates/document/docs/dsl/schema.md +0 -121
  25. package/templates/document/docs/frontend/build.md +0 -118
  26. package/templates/document/docs/frontend/curl.md +0 -75
  27. package/templates/document/docs/frontend/page.md +0 -99
  28. package/templates/document/docs/frontend/widgets.md +0 -151
  29. package/templates/document/docs/guide/config.md +0 -108
  30. package/templates/document/docs/guide/deployment.md +0 -115
  31. package/templates/document/docs/guide/getting-started.md +0 -199
  32. package/templates/document/docs/guide/structure.md +0 -98
  33. package/templates/document/docs/reference/commands.md +0 -70
  34. package/templates/document/docs/reference/faq.md +0 -94
package/cli.js CHANGED
@@ -26,8 +26,8 @@ const TEMPLATES = [
26
26
  {
27
27
  key: "document",
28
28
  alias: "d",
29
- name: "技术文档站",
30
- desc: "对标 VitePress 的文档站模板(导航/侧栏/搜索/暗色模式),内置 lumfall 文档内容",
29
+ name: "技术文档站(空模板)",
30
+ desc: "导航/侧栏/搜索/主题就绪,生成后放入自己的内容即可",
31
31
  selfName: "lumfall-document",
32
32
  },
33
33
  ];
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "create-lumfall",
3
- "version": "1.0.0",
3
+ "version": "1.0.1",
4
4
  "description": "lumfall 应用脚手架:一条命令生成可运行的基础业务项目或技术文档站(pnpm create lumfall my-app)",
5
5
  "bin": {
6
6
  "create-lumfall": "cli.js"
@@ -1,100 +1,29 @@
1
- # lumfall-document
1
+ # lumfall-document(空模板)
2
2
 
3
- 基于 [lumfall](https://www.npmjs.com/package/lumfall) 的技术文档站模板,
4
- 对标 VitePress 的使用体验:顶部导航、侧边栏、页面目录(TOC)、
5
- 站内搜索(Ctrl/Cmd+K)、代码高亮与复制、亮 / 暗主题、上一篇/下一篇、移动端适配。
3
+ 基于 [lumfall](https://www.npmjs.com/package/lumfall) 的技术文档站**空模板**:
4
+ 导航、侧边栏、页面目录(TOC)、站内搜索(Ctrl/Cmd+K)、代码高亮与复制、
5
+ 亮 / 暗主题、上一篇/下一篇、移动端适配全部就绪,生成后只需要写内容。
6
6
 
7
- 模板本身是自举的:**内置内容就是 lumfall 框架的技术文档**,换掉内容即可为
8
- 任何项目搭文档站。文档是纯前端渲染的 SPA,内容由构建期打进产物,无需后端 API。
7
+ > 这个分支(`template/empty`)是 create-lumfall 脚手架 `document` 模板的来源;
8
+ > `main` 分支是自举的完整示例(内置 lumfall 技术文档)。
9
9
 
10
- ## 快速开始
10
+ ## 开始
11
11
 
12
12
  ```sh
13
13
  pnpm install
14
- pnpm start:dev # 本地开发:webpack dev server + 服务
15
- # 打开 http://localhost:3000/view/docs
14
+ pnpm start:dev # http://localhost:3000/view/docs
16
15
 
17
- pnpm start:prod # 生产构建 + 启动(Koa 服务)
16
+ pnpm build:static # 产出 dist-static/(Vercel 等静态托管可直接部署)
18
17
  ```
19
18
 
20
- 环境变量 `_ENV`(local / beta / prod)与构建部署细节同 lumfall 基础工程,
21
- 见[构建与部署文档](docs/guide/deployment.md)。
19
+ ## 写内容
22
20
 
23
- ## 部署到 Vercel(静态托管)
24
-
25
- 文档站是纯前端 SPA:markdown 在构建期全部打进 bundle,运行时不调用任何接口,
26
- 因此**不需要 Node 进程**,可以直接以静态站点部署到 Vercel / Netlify / Nginx。
27
-
28
- ```sh
29
- pnpm build:static # 产出 dist-static/(index.html + app.html + vercel.json + dist/prod/)
30
-
31
- cd dist-static && vercel --prod # CLI 部署
32
- ```
33
-
34
- 或使用 Git 集成:Vercel 项目设置 **Build Command** = `pnpm build:static`,
35
- **Output Directory** = `dist-static`,Framework Preset 选 Other。
36
-
37
- `dist-static/` 的组成:
38
-
39
- | 文件 | 作用 |
40
- | --- | --- |
41
- | `app.html` | 应用外壳(由框架页面模板转换,`window.__LUMFALL__` 替换为静态值) |
42
- | `index.html` | `/` 的重定向页(跳到 `/view/docs`,替代 Koa 的 302 兜底) |
43
- | `vercel.json` | SPA rewrite:`/view/docs/*` → `app.html`;`dist/prod/*` 长缓存头 |
44
- | `dist/prod/...` | 构建产物(保持 `/dist/prod/` 绝对路径可解析) |
45
-
46
- 其他平台的等价配置:把 `/view/docs` 与 `/view/docs/:path*` rewrite 到
47
- `app.html`(Netlify 的 `_redirects`、Nginx 的 `try_files` 即可),`/` 指向
48
- `index.html`。深链接刷新、站内路由、客户端 404 页全部由前端自行处理。
49
-
50
- ::: warning 静态模式的能力边界
51
- 静态部署只有文档站页面:框架自带的 `/view/health`、`/view/dashboard`、
52
- `/health/*`、`/api/*` 都不存在;如果往文档站里加 curl 调接口的功能,
53
- 需要回到 Koa 部署(或为接口单独部署服务)。
54
- :::
55
-
56
- ## 目录结构
57
-
58
- ```text
59
- lumfall-document/
60
- ├── server.js # 服务端入口(homePath 指向 /view/docs)
61
- ├── build.js # 前端构建入口
62
- ├── scripts/build-static.js # 静态站点构建(pnpm build:static → dist-static/)
63
- ├── config/ # 环境配置(同基础工程)
64
- ├── docs/ # ★ 文档内容:全部 markdown,目录结构随意
65
- │ ├── guide/
66
- │ ├── core/
67
- │ ├── dsl/ # Dashboard DSL 章节(Model+Project、schema 模块、接口契约)
68
- │ ├── frontend/
69
- │ ├── advanced/
70
- │ └── reference/
71
- └── app/
72
- ├── webpack.config.js # 额外声明了 .md 的 asset/source 规则
73
- └── pages/
74
- └── docs/ # 文档站页面(单页 + 站内路由)
75
- ├── entry.docs.js # 页面入口:注册 /view/docs 两条路由
76
- ├── docs-config.js # ★ 站点配置:导航、侧栏、首页 hero、页脚
77
- ├── content.js # 内容加载器:require.context 扫 docs/ 下所有 .md
78
- ├── markdown/ # markdown-it 渲染器(锚点/TOC/代码块/提示块/链接)
79
- ├── search.js # 站内搜索索引
80
- ├── theme.js # 亮暗主题
81
- ├── components/ # navbar / sidebar / toc / search / layout
82
- ├── views/ # 首页(hero)与文档页
83
- └── styles/ # 设计变量与排版样式(CSS 变量驱动双主题)
84
- ```
85
-
86
- ## 用它搭自己的文档站
87
-
88
- 三步:
89
-
90
- 1. **改内容**:把 `docs/` 下的 markdown 换成自己的(目录层级随意,
91
- 两级以内体验最佳)。文档里可以互相引用,支持相对链接:
21
+ 1. **内容**:`docs/` 下的 markdown 就是文档,目录结构随意(两级以内体验最佳)。
22
+ 文档里可以互相引用,支持相对链接与锚点:
92
23
  ```markdown
93
- [配置](./config.md) → 同目录
94
- [路由](../core/router-schema.md) → 上级目录
95
- [某节](./config.md#读取配置) → 带锚点
24
+ [其他页](./other.md) [上级目录](../advanced/x.md) [某节](./other.md#锚点)
96
25
  ```
97
- 2. **改配置**:`app/pages/docs/docs-config.js` 是唯一需要动的配置文件——
26
+ 2. **站点配置**:`app/pages/docs/docs-config.js` 是唯一需要动的配置文件——
98
27
  站点名、导航、侧栏分组、首页 hero、页脚。侧栏条目的 `path` 对应
99
28
  `docs/` 下的文件路径(`/view/docs/<path>` ↔ `docs/<path>.md`)
100
29
  3. **可选**:改主题色(`app/pages/docs/styles/vars.less` 的 `--doc-brand`
@@ -109,37 +38,21 @@ lumfall-document/
109
38
  | 页面目录 | 正文右侧 TOC,滚动联动高亮(<1280px 隐藏) |
110
39
  | 站内搜索 | `Ctrl/Cmd + K` 或 `/` 唤起;标题 / 小节 / 正文加权匹配,关键词高亮摘要,键盘导航 |
111
40
  | 代码块 | highlight.js 按需注册语言、语言标签、一键复制、亮暗配色 |
112
- | markdown 扩展 | `::: tip / info / warning / danger <可选标题>` 提示块、标题锚点(悬停显示 #)、外链新窗口 |
41
+ | markdown 扩展 | `::: tip / info / warning / danger <可选标题>` 提示块、标题锚点、外链新窗口 |
113
42
  | 主题 | 亮 / 暗(右上角切换),首次进站跟随系统,localStorage 记忆 |
114
43
  | 上一篇/下一篇 | 按侧边栏顺序自动生成 |
115
- | 路由 | `/view/docs` 首页,`/view/docs/<path>` 文档页,未知路径显示 404 引导 |
116
- | SEO 基础 | 每页动态 `document.title`;如需完整 SEO 需要额外的预渲染方案 |
44
+ | 静态部署 | `pnpm build:static` 一键产出 `dist-static/`(vercel.json rewrite + 长缓存) |
117
45
 
118
46
  ## 写作约定
119
47
 
120
48
  - 每篇文档以 `# 一级标题` 开头(渲染为页面标题),章节用 `##` / `###`
121
49
  (自动进入右侧 TOC 与搜索索引)
122
50
  - 代码块标注语言(`js` / `vue` / `bash` / `json`…)才会高亮
123
- - 小节标题会被 slug 化为锚点 id(中文保留原文字符),可直接 `#锚点` 引用
124
- - 不支持的内容:数学公式、mermaid 图(markdown-it 未接插件,需要时可在
125
- `app/pages/docs/markdown/index.js` 自行扩展)
126
-
127
- ## 搜索原理
128
-
129
- 构建时全部 markdown 以文本形式打进 bundle(`asset/source`),
130
- 搜索在浏览器内存里做索引(标题 / 小节标题 / 正文三级加权,代码块不参与)。
131
- 文档量在几百页以内体验良好;更大规模时建议接后端搜索或引入 lunr/minisearch。
132
-
133
- ## 常见问题
134
-
135
- - **改了 docs/ 下的 md 没生效**:dev 模式需要重新触发编译(保存任意被引用的
136
- 文件);生产模式需要重新 `pnpm build:prod`
137
- - **侧栏点进去 404**:`docs-config.js` 里的 path 与 `docs/` 实际文件不一致
138
- - **想改页面挂载路径(/view/docs)**:改 `docs-config.js` 的 `DOCS_BASE`
139
- 与 `entry.docs.js` 里的两条路由 path,三处保持一致
51
+ - 不支持数学公式、mermaid 图(markdown-it 未接插件,需要时可在
52
+ `app/pages/docs/markdown/index.js` 扩展)
140
53
 
141
54
  ## 相关项目
142
55
 
143
- - `lumfall-basic-project/`:基础业务工程骨架(本模板的工程底座)
144
- - `lumfall-business/`:B 端全栈模板(Dashboard / schema 组件)
145
- - `lumfall/`:框架本体
56
+ - `lumfall-basic-project/`:基础业务工程骨架
57
+ - `lumfall-business/`:B 端全栈模板
58
+ - `create-lumfall/`:应用脚手架(本模板通过它的 `-t document` 生成)
@@ -1,10 +1,9 @@
1
1
  /**
2
2
  * 文档站配置 —— 使用本模板时主要改这个文件。
3
3
  *
4
- * 换成自己的站点只需三步:
4
+ * 换成自己的站点只需两步:
5
5
  * 1. 改本文件的 site / nav / sidebar / hero / footer
6
- * 2. 把 docs/ 目录下的 markdown 换成自己的内容(目录结构随意,两层以内最佳)
7
- * 3. 想改页面挂载路径(/view/docs)时,改 DOCS_BASE 并同步 entry.docs.js 里的路由
6
+ * 2. 把 docs/ 目录下的 markdown 换成自己的内容(目录结构随意,两级以内最佳)
8
7
  */
9
8
 
10
9
  // 站内文档的 URL 前缀 = /view/<页面目录名>
@@ -15,140 +14,55 @@ const doc = (path) => `${DOCS_BASE}/${path}`;
15
14
  export default {
16
15
  // 站点信息
17
16
  site: {
18
- title: "Lumfall",
19
- description: "Lumfall 全栈框架开发文档",
17
+ title: "Your Docs",
18
+ description: "基于 lumfall 的技术文档站",
20
19
  // 右上角仓库链接,不需要就置空
21
- repo: "https://github.com/ikun-Lg/lumfall",
20
+ repo: "",
22
21
  },
23
22
 
24
23
  // 顶部导航:path 为站内路由(高亮按第一级 section 匹配),link 为外链
25
- nav: [
26
- { text: "指南", path: doc("guide/introduction") },
27
- { text: "核心概念", path: doc("core/app-instance") },
28
- { text: "DSL", path: doc("dsl/overview") },
29
- { text: "前端", path: doc("frontend/page") },
30
- { text: "进阶", path: doc("advanced/security") },
31
- { text: "参考", path: doc("reference/faq") },
32
- { text: "GitHub", link: "https://github.com/ikun-Lg/lumfall" },
33
- ],
24
+ nav: [{ text: "文档", path: doc("guide/introduction") }],
34
25
 
35
26
  // 侧边栏分组。items 的 path 必须对应 docs/ 下真实存在的 markdown 文件
36
27
  // (例如 doc("guide/introduction") 对应 docs/guide/introduction.md)
37
28
  sidebar: [
38
29
  {
39
- text: "指南",
40
- items: [
41
- { text: "简介", path: doc("guide/introduction") },
42
- { text: "快速开始", path: doc("guide/getting-started") },
43
- { text: "目录结构与挂载点", path: doc("guide/structure") },
44
- { text: "配置", path: doc("guide/config") },
45
- { text: "构建与部署", path: doc("guide/deployment") },
46
- ],
47
- },
48
- {
49
- text: "核心概念",
50
- items: [
51
- { text: "app 对象与启动流程", path: doc("core/app-instance") },
52
- { text: "Controller 与 Service", path: doc("core/controller-service") },
53
- { text: "路由与参数校验", path: doc("core/router-schema") },
54
- { text: "中间件", path: doc("core/middleware") },
55
- { text: "生命周期", path: doc("core/lifecycle") },
56
- { text: "插件", path: doc("core/plugins") },
57
- ],
58
- },
59
- {
60
- text: "DSL",
61
- items: [
62
- { text: "DSL 总览", path: doc("dsl/overview") },
63
- { text: "Model 与 Project", path: doc("dsl/model-project") },
64
- { text: "菜单项 DSL", path: doc("dsl/menu") },
65
- { text: "schema 模块 DSL", path: doc("dsl/schema") },
66
- { text: "按钮与动态表单", path: doc("dsl/schema-actions") },
67
- { text: "接口契约", path: doc("dsl/api-contract") },
68
- { text: "扩展 DSL", path: doc("dsl/extend") },
69
- { text: "完整模板与注意事项", path: doc("dsl/reference") },
70
- ],
71
- },
72
- {
73
- text: "前端",
74
- items: [
75
- { text: "页面系统", path: doc("frontend/page") },
76
- { text: "前端构建", path: doc("frontend/build") },
77
- { text: "内置组件", path: doc("frontend/widgets") },
78
- { text: "请求工具 curl", path: doc("frontend/curl") },
79
- ],
80
- },
81
- {
82
- text: "进阶",
30
+ text: "开始",
83
31
  items: [
84
- { text: "安全策略", path: doc("advanced/security") },
85
- { text: "健康检查", path: doc("advanced/health") },
86
- { text: "请求观测 monitoring", path: doc("advanced/monitoring") },
87
- { text: "Dashboard 与 Model 配置", path: doc("advanced/dashboard") },
88
- ],
89
- },
90
- {
91
- text: "参考",
92
- items: [
93
- { text: "常见错误自查", path: doc("reference/faq") },
94
- { text: "命令与环境速查", path: doc("reference/commands") },
32
+ { text: "介绍", path: doc("guide/introduction") },
33
+ { text: "示例页面", path: doc("guide/example") },
95
34
  ],
96
35
  },
97
36
  ],
98
37
 
99
38
  // 首页 hero
100
39
  hero: {
101
- name: "Lumfall",
102
- tagline: "Koa + Vue 全栈框架,目录即约定,开箱即用",
103
- text: "目录自动加载、四层配置合并、声明式 Dashboard DSL、页面与路由构建、安全策略、健康检查——写配置和业务代码,而不是搭工程。",
104
- actions: [
105
- { text: "快速开始", path: doc("guide/getting-started"), theme: "brand" },
106
- { text: "DSL 设计", path: doc("dsl/overview"), theme: "brand-outline" },
107
- { text: "GitHub", link: "https://github.com/ikun-Lg/lumfall" },
108
- ],
40
+ name: "Your Docs",
41
+ tagline: "基于 lumfall 的技术文档站模板",
42
+ text: "把 docs/ 目录下的 markdown 换成你的内容,再修改本文件(app/pages/docs/docs-config.js),即可拥有完整的文档站点。",
43
+ actions: [{ text: "开始使用", path: doc("guide/introduction"), theme: "brand" }],
109
44
  features: [
110
45
  {
111
- icon: "📐",
112
- title: "声明式 Dashboard DSL",
113
- details:
114
- "Model + Project 两层 DSL 声明管理台;一份字段 schema 驱动搜索栏、表格、表单、详情四个视图,写配置不改代码。",
115
- },
116
- {
117
- icon: "📁",
118
- title: "目录即约定",
46
+ icon: "📝",
47
+ title: "Markdown 驱动",
119
48
  details:
120
- "controller / service / router / middleware 按目录自动加载并挂载到 app,新建文件即生效,无需手动注册。",
49
+ "docs/ 目录即内容,支持相对链接、标题锚点、提示块、代码高亮与一键复制。",
121
50
  },
122
51
  {
123
- icon: "⚙️",
124
- title: "四层配置合并",
125
- details:
126
- "框架与业务的 config 按 _ENV 分层浅合并,支持 JSON Schema 强校验,环境切换只改一个变量。",
127
- },
128
- {
129
- icon: "🧩",
130
- title: "页面系统",
131
- details:
132
- "Vue 3 页面按 entry.<name>.js 自动发现,Webpack 5 多页构建,/view/<name> 直接访问,支持 HMR 热更新。",
52
+ icon: "🔍",
53
+ title: "站内搜索",
54
+ details: "Ctrl/Cmd + K 唤起,标题与正文加权匹配,纯前端实现无需后端。",
133
55
  },
134
56
  {
135
- icon: "🛡️",
136
- title: "内置安全策略",
137
- details:
138
- "接口签名校验与 project_key 校验开箱可用,参数校验基于 JSON Schema(Ajv),错误码统一。",
139
- },
140
- {
141
- icon: "💚",
142
- title: "健康检查与观测",
143
- details:
144
- "/health/live 与 /health/ready 内置探针机制;monitoring 提供请求级 trace 观测钩子;插件与生命周期覆盖启动退出。",
57
+ icon: "🌗",
58
+ title: "亮暗主题",
59
+ details: "跟随系统并支持手动切换,样式由 CSS 变量驱动,改一个变量即换主题色。",
145
60
  },
146
61
  ],
147
62
  },
148
63
 
149
64
  // 首页与文档页底部
150
65
  footer: {
151
- text: "基于 lumfall 构建的文档站模板",
152
- // copyright: "© 2026 Your Name",
66
+ text: "基于 lumfall-document 模板构建",
153
67
  },
154
68
  };
@@ -0,0 +1,41 @@
1
+ # 示例页面
2
+
3
+ 这个页面演示文档站支持的 markdown 能力,确认效果后可以删除本文件
4
+ (记得同步删掉 `docs-config.js` 侧栏里的对应条目)。
5
+
6
+ ## 提示块
7
+
8
+ ::: tip 提示
9
+ 这是一个 tip 提示块,用于展示正向提示。
10
+ :::
11
+
12
+ ::: warning 注意
13
+ 这是一个 warning 提示块,用于展示需要注意的内容。
14
+ :::
15
+
16
+ ## 代码高亮
17
+
18
+ 标注语言即可高亮,右上角有一键复制:
19
+
20
+ ```js
21
+ const { serviceStart } = require("lumfall");
22
+
23
+ const app = serviceStart({
24
+ name: "my-docs",
25
+ homePath: "/view/docs",
26
+ });
27
+ ```
28
+
29
+ ## 表格
30
+
31
+ | 能力 | 说明 |
32
+ | --- | --- |
33
+ | 页面目录(TOC) | 正文 h2/h3 自动生成,滚动联动高亮 |
34
+ | 站内搜索 | `Ctrl/Cmd + K` 或 `/` 唤起,标题与正文加权匹配,无需后端 |
35
+ | 相对链接 | `[返回介绍](./introduction.md)` 自动转站内路由,支持锚点 |
36
+ | 亮暗主题 | 跟随系统 + 手动切换,主题色由 CSS 变量驱动 |
37
+
38
+ ## 锚点
39
+
40
+ 每个标题悬停会出现 `#` 锚点链接,可以被其他文档引用:
41
+ [跳到代码高亮](./example.md#代码高亮)。
@@ -1,55 +1,31 @@
1
- # 简介
1
+ # 开始使用
2
2
 
3
- **Lumfall** 是一个基于 Node.js 的全栈框架:服务端是 Koa 2,前端是 Vue 3 + Webpack 5,
4
- 通过 **目录约定** 组织代码,按目录自动加载并挂载,开箱即用。
3
+ 这是由 create-lumfall 生成的**空文档站模板**——站点框架(导航、侧栏、目录、搜索、
4
+ 代码高亮、亮暗主题)已全部就绪,你只需要写内容。
5
5
 
6
- ```sh
7
- pnpm add lumfall
8
- ```
9
-
10
- 服务端只需要一个入口文件(`serviceStart()`);前端由 Webpack 按 `app/pages/` 下的页面入口
11
- 自动多页打包,产物交给 Koa 渲染。业务代码写在自己的项目目录里,框架以 npm 包 `lumfall`
12
- 的形式被依赖。
13
-
14
- ## 它解决什么问题
6
+ ## 放入你的内容
15
7
 
16
- 搭一个 Koa + Vue 的业务工程,通常要解决一串工程化问题:目录怎么组织、配置怎么分环境、
17
- 路由和参数校验怎么管、前端怎么多页构建、接口安全怎么兜底……Lumfall 把这些固化为约定:
8
+ 1. 把 `docs/` 目录下的 markdown 换成你的文档(目录结构随意,两级以内体验最佳)
9
+ 2. 修改 `app/pages/docs/docs-config.js`:站点名、导航、侧栏、首页 hero、页脚
10
+ 3. 本地预览:`pnpm start:dev`,访问 <http://localhost:3000/view/docs>
18
11
 
19
- - **目录自动加载**:`app/controller`、`app/service`、`app/router`、`app/middleware`、
20
- `app/extend` 下的文件自动扫描、按约定挂载到 `app` 对象上,新建文件即生效
21
- - **声明式 Dashboard DSL**:Model + Project 两层配置声明整个 B 端管理台;
22
- 一份字段 schema 驱动搜索栏 / 表格 / 表单 / 详情四个视图,写配置不改代码
23
- (见 [DSL 章节](../dsl/overview.md))
24
- - **四层配置合并**:框架配置与业务配置按 `_ENV` 环境分层浅合并,支持 JSON Schema 强校验
25
- - **页面系统**:`app/pages/<name>/entry.<name>.js` 自动发现为页面入口,
26
- 访问 `/view/<name>`,支持开发热更新(HMR)
27
- - **前端构建管线**:Webpack 5 多页构建、vendor/common 分包长缓存、
28
- `webpack-dev-middleware` + HMR 的开发服务
29
- - **统一 API 形态**:controller / service 基类 + 统一响应结构 + 基于 JSON Schema 的参数校验
30
- - **安全策略**:接口签名校验、project_key 校验等内置中间件,配置即用
31
- - **可观测性**:`/health/live`、`/health/ready` 健康检查探针、请求级 monitoring 钩子、
32
- 启动产物诊断清单(路由 / 页面 / 探针一览)
33
- - **插件与生命周期**:数据库、缓存等前置能力以插件注册;启动 / 退出 hook 覆盖全流程
12
+ ## 侧边栏与文件对应
34
13
 
35
- ## 适用场景
14
+ 侧边栏条目的 `path` 对应 `docs/` 下的 markdown 文件:
36
15
 
37
- - 中小型全栈业务系统:管理后台、内容系统、内部工具
38
- - B 端多项目(多租户)控制台:配合内置 Dashboard 与声明式 DSL,
39
- 用配置生成整站管理页
40
- - 需要快速起步、统一团队工程约定的全栈项目
16
+ | 配置项 | 对应文件 |
17
+ | --- | --- |
18
+ | `doc("guide/introduction")` | `docs/guide/introduction.md` |
19
+ | `doc("guide/example")` | `docs/guide/example.md` |
41
20
 
42
- 不适合的场景:重 SSR / SEO 的 C 端站点(页面是客户端渲染的 SPA)。
21
+ ## 发布
43
22
 
44
- ## 快速了解
45
-
46
- - 从零建一个项目,看 [快速开始](./getting-started.md)
47
- - 想直接抄目录骨架,用同工作区的 `lumfall-basic-project/`
48
- - 声明一个 B 端管理台,看 [DSL 总览](../dsl/overview.md)
49
- - B 端管理台完整参考(登录、Dashboard、schema 表格表单)看 `lumfall-business/`
50
- - 技术文档站模板参考 `lumfall-document/`(本站即由它构建)
23
+ ```sh
24
+ pnpm build:static # 产出 dist-static/(含 vercel.json)
25
+ cd dist-static && vercel --prod
26
+ ```
51
27
 
52
28
  ## 下一步
53
29
 
54
- - [快速开始](./getting-started.md):十分钟跑起第一个项目
55
- - [目录结构与挂载点](./structure.md):框架的核心约定
30
+ - 看 [示例页面](./example.md) 了解文档站支持的 markdown 能力,确认后可删除
31
+ - 完整功能说明见 lumfall-document 项目 README
@@ -1,66 +0,0 @@
1
- # Dashboard 与 Model 配置
2
-
3
- 框架自带开箱即用的 B 端控制台页面 `/view/dashboard`。它本身**不含任何业务代码**:
4
- 页面结构、菜单、每个入口的形态,全部由业务项目 `model/` 目录下的
5
- **Dashboard DSL** 声明,启动时自动扫描合并。
6
-
7
- ::: tip 编写配置请看 DSL 章节
8
- 本页讲 Dashboard 页面如何**消费** DSL;如何**编写** DSL(Model / Project /
9
- 菜单 / schema 模块 / 接口契约)见 [DSL 章节](../dsl/overview.md)。
10
- :::
11
-
12
- ## 前端消费链路
13
-
14
- ```
15
- 1. 浏览器访问 /view/dashboard/schema?projectKey=pdd&key=product
16
- (history 模式,服务端由 /view/:page/* 兜底渲染)
17
- 2. dashboard.vue 挂载:
18
- ├── GET /api/project/list?projectKey=pdd → 项目列表(头部项目切换)
19
- └── GET /api/project?projectKey=pdd → 合并后的完整项目配置(含 menu)
20
- 3. menuStore.setMenuList(menu) → 菜单存入 Pinia
21
- 4. header-view 渲染菜单 → 含 subMenu 的项渲染为下拉子菜单
22
- 5. 点击菜单项 → 按 moduleType 决定路由跳转
23
- ├── custom → dashboard 基址 + customConfig.path
24
- ├── sider → /sider(左侧子菜单,子项跳转带 siderKey)
25
- ├── iframe → /iframe
26
- └── schema → /schema → schema-view
27
- 6. schema-view 内部:
28
- useSchema() 按路由 query 的 key / siderKey 从 menuStore 找到菜单项
29
- → buildDtoSchema 按 xxxOption 拆出表格 / 搜索 / 动态组件 schema
30
- → 搜索栏 + 表格渲染,URL query 同名字段预填搜索默认值
31
- 7. 动态组件(配置了 tableConfig.componentConfig 时):
32
- 按钮 eventKey=showComponent 打开 createForm / editForm / detailPanel 抽屉
33
- → 保存成功 emit loadTableData → 表格刷新
34
- ```
35
-
36
- ## Dashboard 前端路由
37
-
38
- | 路由(基址 `/view/dashboard`) | 组件 | 说明 |
39
- | --- | --- | --- |
40
- | `/sider` | sider-view | 侧边复合视图,含子路由 `/sider/iframe`、`/sider/schema` 等 |
41
- | `/iframe` | iframe-view | iframe 嵌入页 |
42
- | `/schema` | schema-view | schema 驱动页 |
43
- | `/sider/:chapters+` | sider-view | sider 多级路径兜底 |
44
-
45
- ## 内置数据接口
46
-
47
- | 接口 | 免 project_key | 说明 |
48
- | --- | --- | --- |
49
- | `GET /api/project/model_list` | ✓ | 全部 Model 及其 Project 概要(DTO) |
50
- | `GET /api/project/list?projectKey=` | ✓ | 项目列表(可按 key 过滤) |
51
- | `GET /api/project?projectKey=` | ✗(需 `project_key` 头) | 合并后的完整项目配置(含 menu) |
52
-
53
- Dashboard 页面启动时用 `$lumfallCurl` 拉取这些接口渲染菜单;URL 带
54
- `?projectKey=xxx` 时 curl 自动带 `project_key` 头(见[请求工具](../frontend/curl.md))。
55
-
56
- ## 项目切换
57
-
58
- 头部右上角的下拉会列出**同 Model 下的其他 Project**(来自
59
- `/api/project/list`),切换后以新项目的 `homePage` 作为落点——这就是
60
- Model + Project 两层 DSL 在体验上的意义:一套公共菜单骨架,多个项目按需覆盖。
61
-
62
- ## 下一步
63
-
64
- - [DSL 总览](../dsl/overview.md):从零声明一个管理台
65
- - [接口契约](../dsl/api-contract.md):schema 模块的后端接口标准
66
- - [安全策略](./security.md):`/api/project/*` 的 project_key 校验
@@ -1,72 +0,0 @@
1
- # 健康检查
2
-
3
- 框架自带两个健康检查接口与一个探针注册器,用于容器编排 / 负载均衡的探活。
4
-
5
- ## 内置接口
6
-
7
- | 接口 | 用途 | 行为 |
8
- | --- | --- | --- |
9
- | `GET /health/live` | 存活探针 | 进程能响应即 200 `{"status":"ok"}` |
10
- | `GET /health/ready` | 就绪探针 | 并行执行全部已注册探针,全部通过 200;任一抛错 / 超时 / 返回 `false` 则 503 |
11
-
12
- 两个接口都带 `Cache-Control: no-store`。`/health/ready` 的响应只包含探针名与状态,
13
- 不包含错误详情(避免泄露内部信息):
14
-
15
- ```json
16
- {
17
- "status": "error",
18
- "checks": [
19
- { "name": "database", "status": "ok" },
20
- { "name": "cache", "status": "error" }
21
- ]
22
- }
23
- ```
24
-
25
- `/view/health` 是框架自带的人工查看页面。
26
-
27
- ## 注册业务探针
28
-
29
- 通过 extend 把业务依赖(数据库、缓存、下游服务)注册为探针:
30
-
31
- ```js
32
- // app/extend/health-check.js
33
- module.exports = (app) => {
34
- app.health.register("database", async () => {
35
- await app.services.db.ping(); // 抛错或返回 false 视为不健康
36
- });
37
-
38
- app.health.register("cache", async () => {
39
- const ok = await redisClient.ping();
40
- return ok === "PONG";
41
- }, { timeoutMs: 1000 }); // 默认 3000ms
42
-
43
- return {}; // extend 的返回值挂到 app.healthCheck(返回 {} 占位即可)
44
- };
45
- ```
46
-
47
- 探针要求:
48
-
49
- - `register(name, probe, { timeoutMs })`:name 唯一非空;probe 是返回
50
- Promise / 布尔的函数;抛错、超时、返回 `false` 都判为不健康
51
- - 同名重复注册会启动失败
52
- - `app.health.list()` 查看已注册探针(也会出现在
53
- `app.diagnostics.getManifest().healthChecks`)
54
-
55
- ## 接入编排系统
56
-
57
- ```yaml
58
- # Kubernetes 示例
59
- livenessProbe:
60
- httpGet:
61
- path: /health/live
62
- port: 3000
63
- readinessProbe:
64
- httpGet:
65
- path: /health/ready
66
- port: 3000
67
- ```
68
-
69
- - 存活探针只证明进程能响应,不要挂重探针
70
- - 就绪探针反映真实依赖状态:依赖故障时摘除流量,但不重启进程
71
- - 文档站这类无外部依赖的纯静态项目,不注册探针即可,`/health/ready`
72
- 恒为 200(`checks` 为空)