openmanual 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +248 -0
- package/dist/bin.js +733 -0
- package/dist/bin.js.map +1 -0
- package/dist/index.d.ts +186 -0
- package/dist/index.js +127 -0
- package/dist/index.js.map +1 -0
- package/package.json +80 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 shenjingnan
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
ADDED
|
@@ -0,0 +1,248 @@
|
|
|
1
|
+
# OpenManual
|
|
2
|
+
|
|
3
|
+
[](https://github.com/shenjingnan/openmanual/actions/workflows/ci.yml)
|
|
4
|
+
[](https://www.npmjs.com/package/openmanual)
|
|
5
|
+
[](https://opensource.org/licenses/MIT)
|
|
6
|
+
|
|
7
|
+
AI 友好的开源文档系统框架。只需编写 Markdown/MDX 文档和 JSON 配置,即可自动生成基于 Next.js 的完整文档站点。
|
|
8
|
+
|
|
9
|
+
## 特性
|
|
10
|
+
|
|
11
|
+
- **零配置起步** — 最小只需 `name` 字段和 `content/index.mdx` 即可启动
|
|
12
|
+
- **代码生成模式** — 通过模板引擎生成 Next.js 应用,用户无需接触框架代码
|
|
13
|
+
- **Zod 校验** — 配置文件使用 Zod Schema 严格校验,错误提示清晰
|
|
14
|
+
- **灵活导航** — 支持多分组侧边栏、自定义图标、折叠控制
|
|
15
|
+
- **主题定制** — 通过 `primaryHue` 色相值轻松调整品牌色
|
|
16
|
+
- **全文搜索** — 内置搜索功能,一行配置开启
|
|
17
|
+
- **MDX 增强** — 支持 React 组件、LaTeX 公式
|
|
18
|
+
- **AI 原生设计** — 纯 JSON 配置 + Markdown 内容,非常适合 AI 辅助生成
|
|
19
|
+
|
|
20
|
+
## 快速开始
|
|
21
|
+
|
|
22
|
+
### 安装
|
|
23
|
+
|
|
24
|
+
```bash
|
|
25
|
+
npm install -g openmanual
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
### 创建项目
|
|
29
|
+
|
|
30
|
+
```bash
|
|
31
|
+
# 1. 创建项目目录
|
|
32
|
+
mkdir my-docs && cd my-docs
|
|
33
|
+
|
|
34
|
+
# 2. 创建配置文件(最小配置)
|
|
35
|
+
cat > openmanual.json << 'EOF'
|
|
36
|
+
{
|
|
37
|
+
"name": "My Docs"
|
|
38
|
+
}
|
|
39
|
+
EOF
|
|
40
|
+
|
|
41
|
+
# 3. 创建首页文档
|
|
42
|
+
mkdir content
|
|
43
|
+
cat > content/index.mdx << 'EOF'
|
|
44
|
+
---
|
|
45
|
+
title: 欢迎使用
|
|
46
|
+
---
|
|
47
|
+
|
|
48
|
+
# Hello OpenManual
|
|
49
|
+
|
|
50
|
+
这是我的第一篇文档。
|
|
51
|
+
EOF
|
|
52
|
+
|
|
53
|
+
# 4. 启动开发服务器
|
|
54
|
+
openmanual dev
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
访问 `http://localhost:3000` 即可看到文档站点。
|
|
58
|
+
|
|
59
|
+
## CLI 命令
|
|
60
|
+
|
|
61
|
+
| 命令 | 说明 |
|
|
62
|
+
|------|------|
|
|
63
|
+
| `openmanual dev` | 启动开发服务器(默认端口 3000) |
|
|
64
|
+
| `openmanual dev -p 8080` | 指定端口启动 |
|
|
65
|
+
| `openmanual build` | 构建静态站点 |
|
|
66
|
+
| `openmanual preview` | 预览构建产物(默认端口 8080) |
|
|
67
|
+
| `openmanual preview -d ./out` | 指定产物目录预览 |
|
|
68
|
+
|
|
69
|
+
## 配置参考
|
|
70
|
+
|
|
71
|
+
在项目根目录创建 `openmanual.json`:
|
|
72
|
+
|
|
73
|
+
```json
|
|
74
|
+
{
|
|
75
|
+
"name": "My Docs",
|
|
76
|
+
"description": "项目文档",
|
|
77
|
+
"contentDir": "content",
|
|
78
|
+
"outputDir": "dist",
|
|
79
|
+
"siteUrl": "https://docs.example.com",
|
|
80
|
+
"locale": "zh",
|
|
81
|
+
"navbar": {
|
|
82
|
+
"logo": "/logo.svg",
|
|
83
|
+
"github": "https://github.com/user/repo",
|
|
84
|
+
"links": [
|
|
85
|
+
{ "label": "Blog", "href": "https://blog.example.com" }
|
|
86
|
+
]
|
|
87
|
+
},
|
|
88
|
+
"footer": {
|
|
89
|
+
"text": "Built with OpenManual"
|
|
90
|
+
},
|
|
91
|
+
"sidebar": [
|
|
92
|
+
{
|
|
93
|
+
"group": "快速开始",
|
|
94
|
+
"icon": "Rocket",
|
|
95
|
+
"collapsed": false,
|
|
96
|
+
"pages": [
|
|
97
|
+
{ "slug": "getting-started", "title": "安装指南", "icon": "Download" },
|
|
98
|
+
{ "slug": "configuration", "title": "配置说明", "icon": "Settings" }
|
|
99
|
+
]
|
|
100
|
+
},
|
|
101
|
+
{
|
|
102
|
+
"group": "进阶",
|
|
103
|
+
"collapsed": true,
|
|
104
|
+
"pages": [
|
|
105
|
+
{ "slug": "advanced/theme", "title": "主题定制" },
|
|
106
|
+
{ "slug": "advanced/search", "title": "搜索配置" }
|
|
107
|
+
]
|
|
108
|
+
}
|
|
109
|
+
],
|
|
110
|
+
"theme": {
|
|
111
|
+
"primaryHue": 240,
|
|
112
|
+
"darkMode": true
|
|
113
|
+
},
|
|
114
|
+
"search": {
|
|
115
|
+
"enabled": true
|
|
116
|
+
},
|
|
117
|
+
"mdx": {
|
|
118
|
+
"latex": true
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
```
|
|
122
|
+
|
|
123
|
+
### 配置字段说明
|
|
124
|
+
|
|
125
|
+
| 字段 | 类型 | 必填 | 默认值 | 说明 |
|
|
126
|
+
|------|------|------|--------|------|
|
|
127
|
+
| `name` | string | 是 | — | 站点名称 |
|
|
128
|
+
| `description` | string | 否 | — | 站点描述 |
|
|
129
|
+
| `contentDir` | string | 否 | `content` | 文档内容目录 |
|
|
130
|
+
| `outputDir` | string | 否 | `dist` | 构建产物输出目录 |
|
|
131
|
+
| `siteUrl` | string | 否 | — | 站点 URL |
|
|
132
|
+
| `locale` | string | 否 | — | 站点语言 |
|
|
133
|
+
| `navbar.logo` | string | 否 | — | Logo 图片路径 |
|
|
134
|
+
| `navbar.github` | string | 否 | — | GitHub 仓库链接 |
|
|
135
|
+
| `navbar.links` | array | 否 | — | 导航栏链接列表 |
|
|
136
|
+
| `footer.text` | string | 否 | — | 页脚文本 |
|
|
137
|
+
| `sidebar[].group` | string | 是 | — | 分组名称 |
|
|
138
|
+
| `sidebar[].icon` | string | 否 | — | 分组图标 |
|
|
139
|
+
| `sidebar[].collapsed` | boolean | 否 | `false` | 是否默认折叠 |
|
|
140
|
+
| `sidebar[].pages[].slug` | string | 是 | — | 页面 slug(对应文件路径) |
|
|
141
|
+
| `sidebar[].pages[].title` | string | 是 | — | 页面标题 |
|
|
142
|
+
| `sidebar[].pages[].icon` | string | 否 | — | 页面图标 |
|
|
143
|
+
| `theme.primaryHue` | number | 否 | — | 主色调色相值(0-360) |
|
|
144
|
+
| `theme.darkMode` | boolean | 否 | `true` | 是否启用暗色模式 |
|
|
145
|
+
| `search.enabled` | boolean | 否 | `true` | 是否启用搜索 |
|
|
146
|
+
| `mdx.latex` | boolean | 否 | `false` | 是否启用 LaTeX 支持 |
|
|
147
|
+
|
|
148
|
+
## 项目结构
|
|
149
|
+
|
|
150
|
+
一个典型的 OpenManual 用户项目结构如下:
|
|
151
|
+
|
|
152
|
+
```
|
|
153
|
+
my-docs/
|
|
154
|
+
├── openmanual.json # 配置文件
|
|
155
|
+
├── content/ # 文档内容目录
|
|
156
|
+
│ ├── index.mdx # 首页
|
|
157
|
+
│ ├── getting-started.mdx
|
|
158
|
+
│ └── advanced/
|
|
159
|
+
│ ├── theme.mdx
|
|
160
|
+
│ └── search.mdx
|
|
161
|
+
└── public/ # 静态资源(可选)
|
|
162
|
+
└── logo.svg
|
|
163
|
+
```
|
|
164
|
+
|
|
165
|
+
## 工作原理
|
|
166
|
+
|
|
167
|
+
```mermaid
|
|
168
|
+
flowchart LR
|
|
169
|
+
A[openmanual.json] --> C[配置解析 + Zod 校验]
|
|
170
|
+
B[content/*.mdx] --> C
|
|
171
|
+
C --> D[模板引擎生成 Next.js 应用]
|
|
172
|
+
D --> E[安装依赖]
|
|
173
|
+
E --> F{dev / build}
|
|
174
|
+
F -->|dev| G[开发服务器 localhost:3000]
|
|
175
|
+
F -->|build| H[静态站点输出到 dist/]
|
|
176
|
+
```
|
|
177
|
+
|
|
178
|
+
1. **读取配置** — 解析 `openmanual.json`,使用 Zod Schema 校验所有字段
|
|
179
|
+
2. **加载内容** — 扫描 `contentDir` 下的所有 MDX 文件
|
|
180
|
+
3. **生成应用** — 通过模板引擎生成完整的 Next.js 应用到临时目录
|
|
181
|
+
4. **链接内容** — 将用户内容目录和静态资源符号链接到生成目录
|
|
182
|
+
5. **安装依赖** — 自动安装生成应用所需的 npm 依赖
|
|
183
|
+
6. **启动/构建** — 启动开发服务器或构建静态产物
|
|
184
|
+
|
|
185
|
+
## 编写文档
|
|
186
|
+
|
|
187
|
+
每个 MDX 文件可以包含 frontmatter 元数据:
|
|
188
|
+
|
|
189
|
+
```mdx
|
|
190
|
+
---
|
|
191
|
+
title: 页面标题
|
|
192
|
+
---
|
|
193
|
+
|
|
194
|
+
# 页面标题
|
|
195
|
+
|
|
196
|
+
这里是正文内容,支持标准 Markdown 语法和 MDX 组件。
|
|
197
|
+
```
|
|
198
|
+
|
|
199
|
+
### 页面树生成规则
|
|
200
|
+
|
|
201
|
+
- 未在 `sidebar` 配置中声明的 MDX 文件不会出现在导航中
|
|
202
|
+
- `slug` 字段对应 `contentDir` 下的文件路径(不含扩展名)
|
|
203
|
+
- 例如 `slug: "advanced/theme"` 对应 `content/advanced/theme.mdx`
|
|
204
|
+
|
|
205
|
+
## 贡献 / 开发
|
|
206
|
+
|
|
207
|
+
欢迎贡献!以下是本地开发环境搭建步骤:
|
|
208
|
+
|
|
209
|
+
```bash
|
|
210
|
+
# 克隆仓库
|
|
211
|
+
git clone https://github.com/shenjingnan/openmanual.git
|
|
212
|
+
cd openmanual
|
|
213
|
+
|
|
214
|
+
# 安装依赖
|
|
215
|
+
pnpm install
|
|
216
|
+
|
|
217
|
+
# 开发模式
|
|
218
|
+
pnpm run dev
|
|
219
|
+
|
|
220
|
+
# 构建
|
|
221
|
+
pnpm run build
|
|
222
|
+
|
|
223
|
+
# 运行测试
|
|
224
|
+
pnpm run test
|
|
225
|
+
|
|
226
|
+
# 代码检查
|
|
227
|
+
pnpm run check
|
|
228
|
+
```
|
|
229
|
+
|
|
230
|
+
### 开发命令
|
|
231
|
+
|
|
232
|
+
| 命令 | 说明 |
|
|
233
|
+
|------|------|
|
|
234
|
+
| `pnpm run dev` | 开发模式(watch) |
|
|
235
|
+
| `pnpm run build` | 构建项目 |
|
|
236
|
+
| `pnpm run test` | 运行测试 |
|
|
237
|
+
| `pnpm run test:watch` | 测试监听模式 |
|
|
238
|
+
| `pnpm run test:coverage` | 测试覆盖率报告 |
|
|
239
|
+
| `pnpm run lint` | 代码检查 |
|
|
240
|
+
| `pnpm run lint:fix` | 自动修复代码问题 |
|
|
241
|
+
| `pnpm run format` | 格式化代码 |
|
|
242
|
+
| `pnpm run typecheck` | TypeScript 类型检查 |
|
|
243
|
+
| `pnpm run check` | 完整检查(typecheck + lint) |
|
|
244
|
+
| `pnpm run spellcheck` | 拼写检查 |
|
|
245
|
+
|
|
246
|
+
## 许可证
|
|
247
|
+
|
|
248
|
+
[MIT](LICENSE) © 2026 shenjingnan
|