Appearance
生成配置
本文档引用的文件
目录
项目结构分析
代码生成系统位于 codegen
目录下,采用分层架构设计。系统主要由配置、模板、生成逻辑和输出目录四部分组成。
图示来源
本节来源
核心生成逻辑
解析配置与读取表结构
代码生成器的核心逻辑位于 src/lib/codegen.ts
文件中,通过 codegen
函数实现。该函数接收上下文、表结构和表名列表作为参数,遍历所有表并生成相应代码。
图示来源
本节来源
模板引擎应用
系统使用自定义模板引擎处理 .ftl
格式的模板文件。模板支持 JavaScript 表达式嵌入,通过 includeFtl
函数解析。
图示来源
配置参数详解
输出路径配置
配置文件 config.ts
定义了代码生成的输出路径和基础设置:
- out: 生成文件输出目录
__out__
- rootPh: 模板文件根目录
template
- projectPh: 项目根目录
typescript
const out = resolve(`${ __dirname }/../../__out__/`).replace(/\\/gm, "/");
const rootPh = resolve(`${ __dirname }/../template`).replace(/\\/gm, "/");
const projectPh = resolve(`${ __dirname }/../../../`).replace(/\\/gm, "/");
数据库连接信息
系统通过 initContext()
函数初始化数据库连接上下文,获取表结构信息。连接信息通常从环境变量或配置文件中读取。
模块配置项
TablesConfigItem
接口定义了详细的模块配置参数:
表级配置
mod
: 模块名称table
: 表名table_comment
: 表注释defaultSort
: 默认排序字段hasTenant_id
: 是否包含租户IDhasOrgId
: 是否包含组织IDcache
: 是否启用缓存log
: 是否启用日志记录
字段级配置
ignoreCodegen
: 忽略代码生成onlyCodegenDeno
: 仅生成后端代码noAdd
: 前端不允许新增noList
: 前端不允许在表格中显示isImg
: 是否为图片字段isAtt
: 是否为附件字段isPassword
: 是否为密码字段dict
: 系统字典关联dictbiz
: 业务字典关联foreignKey
: 外键关联配置isSearchBySelectInput
: 外键搜索方式是否使用选择输入框(新增配置项)
keyword
: 列表页是否启用关键词搜索功能(新增配置项)
本节来源
命令行工具使用
命令行参数
codegen.ts
作为命令行入口,支持以下参数:
-t, --table [value]
: 指定要生成的表名,多个表名用逗号分隔
执行流程
本节来源
模块创建规范
模块目录结构
根据 create_mod.md
文档,新模块应遵循以下目录结构:
pc/src/views/[模块名]/
├── [表名]/
│ ├── List.vue
│ ├── Detail.vue
│ ├── ForeignTabs.vue
│ └── SelectList.vue
命名规范
- 模块名使用小写字母
- 表名使用下划线分隔
- Vue组件首字母大写
- 路由路径与表名一致
配置要求
新模块需在 tables.ts
中定义配置,包括字段信息、外键关系、字典关联等。
本节来源
生成流程与案例
全量生成
当不指定表名时,系统会生成所有配置表的代码:
bash
npm run codegen
流程:
- 获取所有表名
- 遍历每张表
- 读取表结构
- 应用模板生成代码
- 生成路由配置
- 合并git差异
增量生成
指定特定表进行生成:
bash
npm run codegen -t user,role
流程:
- 解析表名参数
- 只处理指定表
- 其余流程与全量生成相同
差异处理机制
系统通过 gitDiffOut()
函数处理代码差异:
typescript
function gitDiffOut() {
// 生成git差异文件
execSync("git diff --full-index ./* > __test__.diff");
// 复制新增文件
const arr = execSync("git ls-files --others --exclude-standard");
for (const item of arr) {
await copy(`${out}/${file}`, `${projectPh}/${file}`);
}
// 应用差异补丁
execSync("git apply __test__.diff --3way");
}
本节来源
最佳实践建议
环境隔离
- 开发、测试、生产环境使用不同的配置文件
- 敏感信息通过环境变量注入
- 使用
.env
文件管理环境变量
敏感信息保护
- 数据库密码等敏感信息不应硬编码
- 使用加密存储或密钥管理服务
- git忽略敏感配置文件
性能调优
- 合理使用缓存配置
- 避免生成不必要的代码
- 定期清理缓存目录
- 优化模板解析性能
错误处理
- 完善的异常捕获机制
- 生成失败时自动恢复
- 详细的错误日志输出
- git状态检查防止冲突
本节来源