RFC:移除内置代码生成器,改为「工程规范 + AI Skill」 #851
Pinned
wenjianzhang
started this conversation in
Ideas
Replies: 0 comments
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
1. 为什么现在提这件事
go-admin 刚完成两件事:后端升到 Go 1.26 / v2.3.0,前端从 Vue 2 + Element UI 迁到 Vue 3 + Element Plus + Vite(v3.0.0)。迁移做完之后,代码生成器的状态就很尴尬了。
下面每一条我都核过代码,附了文件位置,欢迎复核。
1.1 生成器自己能跑,但它生成的东西跑不起来
/dev-tools/gen这几个页面在迁移时被改成了 Vue 3 写法,能正常打开。但模板没人改——它吐出来的仍然是 Vue 2 语法:go-admin/template/v4/vue.go.templateslot-scope:page.sync/:limit.sync/:visible.sync@keyup.enter.nativesize="mini"也就是说:今天任何人点一下"生成代码",拿到的前端页面在当前 UI 工程里是直接白屏的。 这是最难解释的一点——工具本身被维护了,工具的产出没有。
1.2 只支持 MySQL
元数据读取硬依赖
information_schema(db_tables.go/db_columns.go),另外两种驱动直接报错。而 go-admin 三种数据库都是一等公民,Docker 官方镜像默认就是 SQLite。1.3 官方 Docker 镜像里它是坏的
go-admin/Dockerfile只 COPY 了三样东西:template/和static/form-generator/都没进镜像。而NOActionsGen用的是相对路径template/v4/...(apis/tools/gen.go:169)。结论:用官方镜像部署的用户,点代码生成必然收到"模版读取失败";点表单构建必然 404。 这个模块实际上只在"从源码目录直接跑二进制"的开发机上有效。1.4 表单构建器是一个无源码的预编译包,且从第三方 CDN 远程加载 EOL 依赖
/dev-tools/build是个 iframe,指向后端静态目录go-admin/static/form-generator/(636 KB,仓库里没有对应源码,来自 JakHuang/form-generator)。它的index.html里写着:四个问题叠在一起:
1.5 写盘接口的权限模型值得重新审视
GET /api/v1/gen/toproject/:tableId会在服务端创建目录并写入文件(gen.go:219-224)。它注册在sysNoCheckRoleRouter里,只挂了 JWT 中间件,没有挂 Casbin 的AuthCheckRole(app/other/router/gen_router.go:21-30)。保守地说:这意味着任意已登录用户(不论角色)都能触发服务端文件系统写入,而路径的一部分来自数据库中同样可由登录用户写入的字段。我不打算在公开帖子里展开细节;如果有同学想深入,请走 Security Advisory 私下提。
1.6 维护成本
app/other/{apis,models,router}/toolstemplate/v4/+api_migrate.templatesrc/views/dev-tools/gen、src/api/toolssrc/utils/generator、components/FormGen*go-admin/static/form-generatorapp/other/**/*_test.go约 6,100 行 + 636 KB,零测试覆盖。每次 Element Plus 大版本、每次 GORM 大版本、每次目录结构调整,这部分都要跟着改一遍——而实际能用到它的只有"从源码跑、用 MySQL、在开发机上"这一个交集。
2. 提案
删除
app/other/apis/tools、app/other/models/tools、app/other/router/gen_router.go中的 gen 相关路由、template/v4/、template/api_migrate.template、static/form-generator/src/views/dev-tools/gen、src/views/dev-tools/build、src/api/tools、src/utils/generator、components/FormGenRender、components/FormGenParsersys_api记录;sys_tables/sys_columns两张元数据表保留
/dev-tools/swagger(系统接口)——跟生成器无关,继续留着template/cmd_api.template、router.template、migrate.template——见上方更正,它们属于应用脚手架与迁移命令,与本提案无关template/v4/承载的"标准 CRUD 长什么样"这一信息不会丢失:它将由app/demo/这个真实可编译、有测试、CI 会跑的参照模块承接。相比模板,样板模块的好处是过时会导致构建失败,而模板过时只会静默产出坏代码——本提案第 1.1 节描述的正是后者3. 用什么替代
3.1 一份工程规范(对人、对 AI 都有效)
在两个仓库根目录各放一份
AGENTS.md(同时软链CLAUDE.md/.cursorrules,这几个生态都在收敛到同一个文件),内容就是把现在藏在模板里的约定显式写出来:apis→service→service/dto→models,各层职责与错误处理约定模块:资源:操作)BasicLayout+el-card的列表页结构、src/api/的 RESTful 命名(list*/get*/add*/update*/del*)、v-permisaction用法sys-user或新建一个demo模块),作为"照着这个写"的标准答案这份东西的价值不依赖 AI——新人贡献者、写插件的人同样需要它。今天它不存在,只能靠读代码猜。
3.2 官方维护的 AI Skill
在
.claude/skills/下提供 skill(Claude Code 直接可用,Cursor / Copilot / Cline 等也能读AGENTS.md拿到同样的约定):go-admin-crudgo-admin-menugo-admin-review相比模板引擎的实际好处:
information_schemago build/pnpm lint/ 单测,发现问题当场改status就知道该配字典、是created_at就知道该格式化——模板做不到这种判断必须说清楚的代价:
这正是下面 Option B 存在的理由。
4. 三个选项 —— 这是我最想听意见的部分
Option A:完全删除,只留规范 + Skill
最干净,维护负担归零。代价:不用 AI 工具的人失去了脚手架能力。
Option B:删掉 Web UI,保留一个离线 CLI 子命令
./go-admin gen --table sys_user --package admin。模板留在二进制里(go:embed,顺便解决 1.3 的路径问题),砍掉 Web UI、sys_tables/sys_columns两张表、写盘 HTTP 接口和表单构建器——1.2/1.3/1.4/1.5 全部解决,1.1 需要重写一遍 Vue 模板。确定性保留,离线可用。代价:那 ~1,600 行模板还得继续跟着 Element Plus 走。
Option C:维持现状,只修模板
最小改动,但 1.2~1.6 一个都没解决,且每个大版本都要重付一次这个成本。
我个人倾向 A,但如果有相当数量的人是在内网/离线/合规环境下真的在用生成器,那 B 更负责任。
所以我想请大家回帖告诉我:
/dev-tools/build)有人在用吗?(说实话我怀疑基本没有)5. 对现有用户的影响
如果你从没点开过这两个菜单:升级后无感,除了二进制小一点、Docker 镜像小 636 KB。
如果你用生成器生成过业务模块:已经生成的代码完全不受影响——它们是普通的 Go/Vue 文件,早就在你的仓库里了,删的是"生成它们的工厂",不是产物。
需要做的(会提供一键迁移 SQL):
sys_api记录sys_tables/sys_columns两张表可以 drop(只存生成器的元数据,不影响业务)不会做的:不会在任何补丁版本里删。按下面的节奏走。
6. 时间线(可调整)
AGENTS.md与第一版 skill;生成器仍可用如果讨论结果倾向 Option B,第三步就换成"上线 CLI 子命令"。
7. 相关
欢迎直接反对——尤其是如果你正在生产环境依赖这个模块。我更怕的是没人说话然后删了才发现有人在用。
/cc @go-admin-team
All reactions