growork 1.0.1 → 1.1.2
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/.claude/commands/review.md +62 -0
- package/.claude/settings.local.json +2 -1
- package/README.md +108 -105
- package/claude.md +103 -2
- package/dist/index.js +211 -71
- package/docs/architecture.md +175 -0
- package/docs/developer-notes.md +67 -0
- package/docs/prd-1.0.0.md +86 -0
- package/docs/prd-1.1.1.md +215 -0
- package/docs/prd-1.1.2.md +136 -0
- package/docs/prd-template.md +65 -0
- package/growork.config.yaml +36 -33
- package/package.json +1 -1
- package/src/commands/init.ts +1 -5
- package/src/commands/list.ts +52 -19
- package/src/commands/sync.ts +69 -26
- package/src/index.ts +13 -4
- package/src/utils/config.ts +159 -40
- package/tests/config.test.ts +383 -3
- package/tests/feishu.test.ts +187 -0
- package/tests/notion.test.ts +81 -0
- package/tests/sync.test.ts +65 -0
- package/{docs/test → tests}/test-cases.md +76 -26
- package/docs/product/prd-v1.0.md +0 -418
- package/test/backend-ai.md +0 -539
- package/test/backend-api.md +0 -1236
- package/test/prd-5spread.md +0 -74
- package/test/push-prd-notion.md +0 -126
- package/test/push.md +0 -119
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
---
|
|
2
|
+
allowed-tools: Bash, Read, Grep, Glob
|
|
3
|
+
description: 代码审查,检查变更是否符合项目规范
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
## 代码审查
|
|
7
|
+
|
|
8
|
+
审查当前变更,核心原则:**用最少的代码实现功能**。
|
|
9
|
+
|
|
10
|
+
### 当前变更
|
|
11
|
+
|
|
12
|
+
!`git diff --stat HEAD`
|
|
13
|
+
|
|
14
|
+
### 审查清单
|
|
15
|
+
|
|
16
|
+
读取变更内容 `git diff HEAD`,逐条检查:
|
|
17
|
+
|
|
18
|
+
#### 1. 删除未使用的代码
|
|
19
|
+
- [ ] 未使用的函数、变量、导入
|
|
20
|
+
- [ ] 注释掉的代码
|
|
21
|
+
- [ ] 未使用的 TODO 注释
|
|
22
|
+
|
|
23
|
+
#### 2. 不要提前抽象
|
|
24
|
+
- [ ] 只用一次的代码不需要封装成函数
|
|
25
|
+
- [ ] 不要写 Factory、Manager、Helper 等过度抽象
|
|
26
|
+
- [ ] 三行重复代码比一个过早抽象更好
|
|
27
|
+
|
|
28
|
+
#### 3. 不要写"可能用到"的代码
|
|
29
|
+
- [ ] 只实现当前需求
|
|
30
|
+
- [ ] 不要预留"将来可能需要"的接口
|
|
31
|
+
- [ ] 不要添加未使用的配置项
|
|
32
|
+
|
|
33
|
+
#### 4. 错误处理要简洁
|
|
34
|
+
- [ ] 不要过度防御(检查不可能发生的情况)
|
|
35
|
+
- [ ] 让错误自然抛出,顶层统一处理
|
|
36
|
+
- [ ] 不要给每种错误类型都写 catch 分支
|
|
37
|
+
|
|
38
|
+
#### 5. 避免过度配置化
|
|
39
|
+
- [ ] 不要添加不会用到的选项
|
|
40
|
+
- [ ] 硬编码比过度灵活更好
|
|
41
|
+
- [ ] 一个功能只需要一种实现方式
|
|
42
|
+
|
|
43
|
+
#### 6. 依赖和结构
|
|
44
|
+
- [ ] 能用标准库就不引入新依赖
|
|
45
|
+
- [ ] 目录结构保持扁平
|
|
46
|
+
- [ ] 一个函数只做一件事
|
|
47
|
+
|
|
48
|
+
### 输出格式
|
|
49
|
+
|
|
50
|
+
```
|
|
51
|
+
## 审查结果
|
|
52
|
+
|
|
53
|
+
✅ 通过 / ⚠️ 需要修改
|
|
54
|
+
|
|
55
|
+
### 问题列表(如有)
|
|
56
|
+
|
|
57
|
+
1. `文件:行号` - 违反了什么原则 - 如何简化
|
|
58
|
+
|
|
59
|
+
### 可删除的代码
|
|
60
|
+
|
|
61
|
+
- `文件:行号` - 原因
|
|
62
|
+
```
|
package/README.md
CHANGED
|
@@ -4,51 +4,40 @@
|
|
|
4
4
|
|
|
5
5
|
这样 AI 工具(如 Claude、Cursor、Windsurf)就能直接读取你的产品文档,帮你写代码。
|
|
6
6
|
|
|
7
|
-
|
|
7
|
+
[](https://www.npmjs.com/package/growork)
|
|
8
8
|
|
|
9
|
-
##
|
|
9
|
+
## 功能
|
|
10
10
|
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
11
|
+
- 自动下载飞书文档,转成 Markdown 格式
|
|
12
|
+
- 自动下载 Notion 页面,转成 Markdown 格式
|
|
13
|
+
- 支持 Figma 设计稿链接,自动生成链接文档
|
|
14
|
+
- 按**版本 → 功能 → 文档类型**组织文档,AI 更容易理解
|
|
15
|
+
- 一条命令同步所有文档
|
|
15
16
|
|
|
16
|
-
|
|
17
|
+
> ⚠️ **每个版本都是破坏性更新**,不保证向后兼容。升级前请查看更新日志,必要时重新初始化配置文件。
|
|
17
18
|
|
|
18
|
-
##
|
|
19
|
+
## 安装
|
|
19
20
|
|
|
20
|
-
###
|
|
21
|
+
### 1. 安装 Node.js
|
|
21
22
|
|
|
22
|
-
GroWork 需要 Node.js
|
|
23
|
+
GroWork 需要 Node.js >= 18。如果你还没安装:
|
|
23
24
|
|
|
24
25
|
1. 打开 https://nodejs.org/
|
|
25
26
|
2. 点击绿色的 **"LTS"** 按钮下载
|
|
26
27
|
3. 双击下载的文件,按提示完成安装
|
|
27
28
|
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
打开「终端」(Mac)或「命令提示符」(Windows),输入:
|
|
29
|
+
检查是否安装成功:
|
|
31
30
|
|
|
32
31
|
```bash
|
|
33
32
|
node -v
|
|
34
33
|
```
|
|
35
34
|
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
---
|
|
39
|
-
|
|
40
|
-
### 第二步:安装 GroWork
|
|
41
|
-
|
|
42
|
-
在终端中输入:
|
|
35
|
+
### 2. 安装 GroWork
|
|
43
36
|
|
|
44
37
|
```bash
|
|
45
38
|
npm install -g growork
|
|
46
39
|
```
|
|
47
40
|
|
|
48
|
-
等待安装完成即可。
|
|
49
|
-
|
|
50
|
-
---
|
|
51
|
-
|
|
52
41
|
## 使用方法
|
|
53
42
|
|
|
54
43
|
### 1. 初始化项目
|
|
@@ -61,14 +50,10 @@ growork init
|
|
|
61
50
|
|
|
62
51
|
这会在当前目录创建一个 `growork.config.yaml` 配置文件。
|
|
63
52
|
|
|
64
|
-
---
|
|
65
|
-
|
|
66
53
|
### 2. 获取飞书凭证(如果你要同步飞书文档)
|
|
67
54
|
|
|
68
55
|
你需要在飞书开放平台创建一个应用,获取「App ID」和「App Secret」。
|
|
69
56
|
|
|
70
|
-
**详细步骤:**
|
|
71
|
-
|
|
72
57
|
1. **打开飞书开放平台**
|
|
73
58
|
- 国际版 Lark:https://open.larksuite.com/
|
|
74
59
|
- 国内版飞书:https://open.feishu.cn/
|
|
@@ -76,41 +61,26 @@ growork init
|
|
|
76
61
|
2. **创建应用**
|
|
77
62
|
- 点击「创建企业自建应用」
|
|
78
63
|
- 填写应用名称(随便起,比如「文档同步」)
|
|
79
|
-
- 点击「创建」
|
|
80
64
|
|
|
81
65
|
3. **获取凭证**
|
|
82
66
|
- 在应用详情页,找到「凭证与基础信息」
|
|
83
|
-
- 复制 **App ID**(以 `cli_`
|
|
84
|
-
- 复制 **App Secret**
|
|
67
|
+
- 复制 **App ID**(以 `cli_` 开头)和 **App Secret**
|
|
85
68
|
|
|
86
69
|
4. **开通权限**
|
|
87
70
|
- 点击左侧「权限管理」
|
|
88
|
-
-
|
|
89
|
-
- `docx:document:readonly`(读取文档)
|
|
90
|
-
- `wiki:wiki:readonly`(读取知识库)
|
|
91
|
-
- 点击「批量开通」
|
|
71
|
+
- 搜索并开通:`docx:document:readonly`、`wiki:wiki:readonly`
|
|
92
72
|
|
|
93
73
|
5. **发布应用**
|
|
94
|
-
-
|
|
95
|
-
- 点击「创建版本」,填写版本号(如 1.0.0)
|
|
96
|
-
- 提交审核(企业内部应用一般自动通过)
|
|
97
|
-
|
|
98
|
-
---
|
|
74
|
+
- 点击「版本管理与发布」→「创建版本」→ 提交审核
|
|
99
75
|
|
|
100
76
|
### 3. 获取 Notion 凭证(如果你要同步 Notion 页面)
|
|
101
77
|
|
|
102
|
-
**详细步骤:**
|
|
103
|
-
|
|
104
78
|
1. **创建 Integration**
|
|
105
79
|
- 打开 https://www.notion.so/my-integrations
|
|
106
|
-
- 点击「New integration
|
|
107
|
-
- 填写名称(随便起,比如「文档同步」)
|
|
108
|
-
- 选择你的 Workspace
|
|
109
|
-
- 点击「Submit」
|
|
80
|
+
- 点击「New integration」,填写名称,选择 Workspace
|
|
110
81
|
|
|
111
82
|
2. **复制 Token**
|
|
112
|
-
- 在 Integration
|
|
113
|
-
- 复制这个 Token(以 `ntn_` 或 `secret_` 开头)
|
|
83
|
+
- 在 Integration 详情页,复制 Token(以 `ntn_` 或 `secret_` 开头)
|
|
114
84
|
|
|
115
85
|
3. **给页面授权**(重要!)
|
|
116
86
|
- 打开你要同步的 Notion 页面
|
|
@@ -118,8 +88,6 @@ growork init
|
|
|
118
88
|
- 选择你刚创建的 Integration
|
|
119
89
|
- **每个要同步的页面都需要做这一步!**
|
|
120
90
|
|
|
121
|
-
---
|
|
122
|
-
|
|
123
91
|
### 4. 编辑配置文件
|
|
124
92
|
|
|
125
93
|
用任意文本编辑器打开 `growork.config.yaml`,填入你的凭证和文档链接:
|
|
@@ -127,63 +95,114 @@ growork init
|
|
|
127
95
|
```yaml
|
|
128
96
|
# 飞书配置(如果不用飞书,可以删除这部分)
|
|
129
97
|
feishu:
|
|
130
|
-
appId: "cli_你的AppID"
|
|
131
|
-
appSecret: "你的AppSecret"
|
|
98
|
+
appId: "cli_你的AppID"
|
|
99
|
+
appSecret: "你的AppSecret"
|
|
132
100
|
domain: "lark" # 国际版用 lark,国内版用 feishu
|
|
133
101
|
|
|
134
102
|
# Notion 配置(如果不用 Notion,可以删除这部分)
|
|
135
103
|
notion:
|
|
136
|
-
token: "ntn_你的Token"
|
|
137
|
-
|
|
138
|
-
#
|
|
139
|
-
docs
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
104
|
+
token: "ntn_你的Token"
|
|
105
|
+
|
|
106
|
+
# 输出目录(默认是 docs)
|
|
107
|
+
outputDir: "docs"
|
|
108
|
+
|
|
109
|
+
# 全局文档(不跟版本走的公共文档)
|
|
110
|
+
custom:
|
|
111
|
+
- "https://xxx.feishu.cn/docx/xxxxx" # 直接写链接
|
|
112
|
+
- url: "https://www.notion.so/xxxxx"
|
|
113
|
+
name: "技术架构" # 可选:自定义名称
|
|
114
|
+
|
|
115
|
+
# 版本化文档(按功能模块组织)
|
|
116
|
+
versions:
|
|
117
|
+
v1.0:
|
|
118
|
+
用户登录: # 功能名称
|
|
119
|
+
prd: # PRD 文档
|
|
120
|
+
- "https://xxx.feishu.cn/docx/xxxxx"
|
|
121
|
+
design: # 设计文档(支持 Figma 链接)
|
|
122
|
+
- "https://www.figma.com/design/xxx?node-id=1-20"
|
|
123
|
+
- "https://www.figma.com/design/xxx?node-id=1-30"
|
|
124
|
+
api: # 接口文档
|
|
125
|
+
- "https://xxx.feishu.cn/docx/zzzzz"
|
|
126
|
+
test: # 测试用例
|
|
127
|
+
- "https://www.notion.so/aaaaa"
|
|
128
|
+
|
|
129
|
+
# 简单功能可以不分类
|
|
130
|
+
小优化:
|
|
131
|
+
- "https://xxx.feishu.cn/docx/bbbbb"
|
|
151
132
|
```
|
|
152
133
|
|
|
134
|
+
**配置说明:**
|
|
135
|
+
|
|
136
|
+
| 区域 | 说明 |
|
|
137
|
+
| ---------- | ------------------------------------------------ |
|
|
138
|
+
| `custom` | 全局文档,不属于任何版本(如技术架构、编码规范) |
|
|
139
|
+
| `versions` | 按版本和功能组织的文档 |
|
|
140
|
+
| `prd` | 产品需求文档 |
|
|
141
|
+
| `design` | 设计稿(支持 Figma 链接,自动生成链接文档) |
|
|
142
|
+
| `api` | 接口/技术方案 |
|
|
143
|
+
| `test` | 测试用例 |
|
|
144
|
+
|
|
153
145
|
**如何获取文档链接?**
|
|
154
146
|
|
|
155
147
|
- **飞书**:打开文档,直接复制浏览器地址栏的链接
|
|
156
148
|
- **Notion**:打开页面,点击右上角「Share」→「Copy link」
|
|
157
|
-
|
|
158
|
-
---
|
|
149
|
+
- **Figma**:打开设计稿,复制浏览器地址栏的链接(可带 `node-id` 参数定位到具体页面)
|
|
159
150
|
|
|
160
151
|
### 5. 同步文档
|
|
161
152
|
|
|
162
|
-
运行以下命令,自动下载所有文档:
|
|
163
|
-
|
|
164
153
|
```bash
|
|
165
154
|
growork sync
|
|
166
155
|
```
|
|
167
156
|
|
|
168
|
-
|
|
157
|
+
同步完成后,文档会按以下结构保存:
|
|
169
158
|
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
159
|
+
```
|
|
160
|
+
docs/
|
|
161
|
+
├── custom/ # 全局文档
|
|
162
|
+
│ ├── 技术架构.md
|
|
163
|
+
│ └── 编码规范.md
|
|
164
|
+
└── v1.0/ # 版本目录
|
|
165
|
+
├── 用户登录/ # 功能目录
|
|
166
|
+
│ ├── prd/
|
|
167
|
+
│ │ └── 用户登录PRD.md
|
|
168
|
+
│ ├── design/
|
|
169
|
+
│ │ └── design.md # Figma 链接自动合并到此文件
|
|
170
|
+
│ └── api/
|
|
171
|
+
│ └── 登录接口文档.md
|
|
172
|
+
└── 小优化/
|
|
173
|
+
└── 优化说明.md
|
|
174
174
|
```
|
|
175
175
|
|
|
176
|
-
|
|
176
|
+
**只同步特定内容:**
|
|
177
177
|
|
|
178
178
|
```bash
|
|
179
|
-
growork
|
|
179
|
+
growork sync -c # 只同步全局文档
|
|
180
|
+
growork sync --ver v1.0 # 只同步 v1.0 版本
|
|
181
|
+
growork sync -f 用户登录 # 只同步「用户登录」功能
|
|
180
182
|
```
|
|
181
183
|
|
|
182
|
-
|
|
184
|
+
## 命令速查
|
|
185
|
+
|
|
186
|
+
| 命令 | 说明 |
|
|
187
|
+
| --------------------------- | -------------- |
|
|
188
|
+
| `growork init` | 创建配置文件 |
|
|
189
|
+
| `growork sync` | 同步所有文档 |
|
|
190
|
+
| `growork sync -c` | 只同步全局文档 |
|
|
191
|
+
| `growork sync --ver v1.0` | 只同步指定版本 |
|
|
192
|
+
| `growork sync -f 功能名` | 只同步指定功能 |
|
|
193
|
+
| `growork list` | 查看文档列表 |
|
|
194
|
+
|
|
195
|
+
## 支持的文档类型
|
|
196
|
+
|
|
197
|
+
| 平台 | 支持的内容 | 处理方式 |
|
|
198
|
+
| ------ | ---------------------------------------------- | -------------------- |
|
|
199
|
+
| 飞书 | 普通文档 (`/docx/`)、知识库 (`/wiki/`) | 调用 API 下载内容 |
|
|
200
|
+
| Notion | 任意页面(包含数据库的页面会自动转为表格) | 调用 API 下载内容 |
|
|
201
|
+
| Figma | 设计稿链接 (`figma.com/design/...`) | 直接生成链接文档 |
|
|
183
202
|
|
|
184
203
|
## 常见问题
|
|
185
204
|
|
|
186
|
-
###
|
|
205
|
+
### 提示「权限不足」或「401」错误
|
|
187
206
|
|
|
188
207
|
**飞书文档:**
|
|
189
208
|
- 确认应用已开通 `docx:document:readonly` 和 `wiki:wiki:readonly` 权限
|
|
@@ -191,13 +210,9 @@ growork list
|
|
|
191
210
|
- 确认你有权限访问该文档
|
|
192
211
|
|
|
193
212
|
**Notion 页面:**
|
|
194
|
-
- 确认你已经把 Integration
|
|
213
|
+
- 确认你已经把 Integration 连接到了该页面
|
|
195
214
|
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
### Q: 提示「找不到命令」或「command not found」
|
|
199
|
-
|
|
200
|
-
Node.js 可能没有正确安装,或者 npm 全局路径没有加入系统 PATH。
|
|
215
|
+
### 提示「找不到命令」或「command not found」
|
|
201
216
|
|
|
202
217
|
尝试重新安装 Node.js,或者使用 `npx` 运行:
|
|
203
218
|
|
|
@@ -205,39 +220,27 @@ Node.js 可能没有正确安装,或者 npm 全局路径没有加入系统 PAT
|
|
|
205
220
|
npx growork sync
|
|
206
221
|
```
|
|
207
222
|
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
### Q: 同步后文档是空的
|
|
223
|
+
### 同步后文档是空的
|
|
211
224
|
|
|
212
225
|
- 检查文档链接是否正确
|
|
213
226
|
- 检查你是否有权限访问该文档
|
|
214
227
|
- 飞书知识库文档需要使用 `/wiki/` 格式的链接
|
|
215
228
|
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
### Q: 如何更新已同步的文档?
|
|
229
|
+
### 如何更新已同步的文档?
|
|
219
230
|
|
|
220
231
|
直接再次运行 `growork sync`,会自动覆盖本地文件。
|
|
221
232
|
|
|
222
|
-
|
|
233
|
+
### 文件名是怎么生成的?
|
|
223
234
|
|
|
224
|
-
|
|
235
|
+
文件名会自动从文档标题获取,并处理特殊字符:
|
|
225
236
|
|
|
226
|
-
|
|
227
|
-
| --- | --- |
|
|
228
|
-
| 飞书 | 普通文档 (`/docx/`)、知识库 (`/wiki/`) |
|
|
229
|
-
| Notion | 任意页面(包含数据库的页面会自动转为表格) |
|
|
237
|
+
- `用户登录 / 注册流程 (v1.0)` → `用户登录-注册流程-v1.0.md`
|
|
230
238
|
|
|
231
|
-
|
|
239
|
+
你也可以在配置中用 `name` 字段自定义名称。
|
|
232
240
|
|
|
233
241
|
## 需要帮助?
|
|
234
242
|
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
1. 在 GitHub 上提 Issue:https://github.com/你的仓库/issues
|
|
238
|
-
2. 检查上面的「常见问题」部分
|
|
239
|
-
|
|
240
|
-
---
|
|
243
|
+
- [GitHub Issues](https://github.com/ThinkerJack/GroWork/issues)
|
|
241
244
|
|
|
242
245
|
## License
|
|
243
246
|
|
package/claude.md
CHANGED
|
@@ -1,4 +1,105 @@
|
|
|
1
|
-
# GroWork
|
|
1
|
+
# GroWork
|
|
2
|
+
|
|
3
|
+
无需关注test_export下的内容
|
|
4
|
+
|
|
5
|
+
## 项目简介
|
|
6
|
+
|
|
7
|
+
GroWork 是一个文档同步 CLI 工具,将飞书文档和 Notion 页面自动下载到本地,转为 Markdown 格式,便于 AI 工具(Claude、Cursor 等)读取。
|
|
8
|
+
|
|
9
|
+
## 项目结构
|
|
10
|
+
|
|
11
|
+
```
|
|
12
|
+
src/
|
|
13
|
+
├── index.ts # CLI 入口,使用 commander 定义命令
|
|
14
|
+
├── commands/
|
|
15
|
+
│ ├── init.ts # growork init - 初始化配置文件
|
|
16
|
+
│ ├── sync.ts # growork sync [name] - 同步文档
|
|
17
|
+
│ └── list.ts # growork list - 列出所有文档
|
|
18
|
+
├── services/
|
|
19
|
+
│ ├── feishu.ts # 飞书 API,转换飞书 block 为 Markdown
|
|
20
|
+
│ └── notion.ts # Notion API,使用 notion-to-md 库
|
|
21
|
+
└── utils/
|
|
22
|
+
└── config.ts # 配置文件解析和类型定义
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
## 技术栈
|
|
26
|
+
|
|
27
|
+
- **Runtime**: Node.js >= 18, ESM 模块
|
|
28
|
+
- **构建**: tsup
|
|
29
|
+
- **依赖**: commander (CLI), @larksuiteoapi/node-sdk (飞书), @notionhq/client + notion-to-md (Notion), yaml (配置), chalk (终端颜色)
|
|
30
|
+
|
|
31
|
+
## 配置文件
|
|
32
|
+
|
|
33
|
+
`growork.config.yaml` 结构:
|
|
34
|
+
|
|
35
|
+
```yaml
|
|
36
|
+
feishu:
|
|
37
|
+
appId: "cli_xxx"
|
|
38
|
+
appSecret: "xxx"
|
|
39
|
+
domain: "lark" # lark(国际版) 或 feishu(国内版)
|
|
40
|
+
|
|
41
|
+
notion:
|
|
42
|
+
token: "ntn_xxx"
|
|
43
|
+
|
|
44
|
+
outputDir: "docs" # 输出根目录
|
|
45
|
+
|
|
46
|
+
custom: # 全局文档
|
|
47
|
+
- "https://xxx.feishu.cn/docx/xxxxx"
|
|
48
|
+
|
|
49
|
+
versions: # 版本化文档
|
|
50
|
+
v1.0:
|
|
51
|
+
用户登录:
|
|
52
|
+
prd:
|
|
53
|
+
- "https://xxx.feishu.cn/docx/xxxxx"
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
## 常用命令
|
|
57
|
+
|
|
58
|
+
```bash
|
|
59
|
+
npm run build # 构建
|
|
60
|
+
npm run dev # 开发模式
|
|
61
|
+
node dist/index.js sync [name] # 同步文档
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
## 关键类型
|
|
65
|
+
|
|
66
|
+
```typescript
|
|
67
|
+
// 文档输入格式
|
|
68
|
+
type DocInput = string | { url: string; name?: string };
|
|
69
|
+
|
|
70
|
+
// 功能下的文档分类
|
|
71
|
+
type FeatureValue = DocInput[] | {
|
|
72
|
+
prd?: DocInput[];
|
|
73
|
+
design?: DocInput[];
|
|
74
|
+
api?: DocInput[];
|
|
75
|
+
test?: DocInput[];
|
|
76
|
+
};
|
|
77
|
+
|
|
78
|
+
// 配置文件结构
|
|
79
|
+
interface GroworkConfigV2 {
|
|
80
|
+
feishu?: FeishuConfig;
|
|
81
|
+
notion?: NotionConfig;
|
|
82
|
+
outputDir?: string;
|
|
83
|
+
custom?: DocInput[];
|
|
84
|
+
versions?: {
|
|
85
|
+
[version: string]: {
|
|
86
|
+
[feature: string]: FeatureValue;
|
|
87
|
+
};
|
|
88
|
+
};
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
// 标准化后的文档
|
|
92
|
+
interface NormalizedDoc {
|
|
93
|
+
url: string;
|
|
94
|
+
name?: string;
|
|
95
|
+
type: 'feishu' | 'notion';
|
|
96
|
+
outputPath: string; // 含 {title} 占位符
|
|
97
|
+
}
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
---
|
|
101
|
+
|
|
102
|
+
# 架构原则
|
|
2
103
|
|
|
3
104
|
## 核心原则:用最少的代码实现功能
|
|
4
105
|
|
|
@@ -123,7 +224,7 @@ src/
|
|
|
123
224
|
|
|
124
225
|
### 命名
|
|
125
226
|
|
|
126
|
-
-
|
|
227
|
+
- 文件名:小写,如 `feishu.ts`, `config.ts`
|
|
127
228
|
- 函数名:动词开头,如 `syncDoc`, `parseConfig`
|
|
128
229
|
- 布尔变量:is/has/should 开头,如 `isValid`
|
|
129
230
|
|