DenoX CLI:在保持控制力的同时搭建项目与功能框架
安装 DenoX CLI,搭建应用框架,利用 OpenAPI 生成 MVC 功能模块,安全地移除模块,并在不修改应用代码的情况下升级框架自带的文件。
DenoX的核心目标之一是在不剥夺工程师控制权的前提下减少重复性的开发工作。该框架自带CLI,仅为一个TypeScript文件,能够创建项目、生成完整功能、安全地移除模块以及升级框架本身。
与需要引入数十个包的许多现代CLI不同,DenoX CLI完全依赖Deno的原生功能。
安装
只需一条命令即可完成安装:
deno install -grA -n denox https://raw.githubusercontent.com/olavomello/denox/main/cli/main.ts
或者无需安装直接运行:
deno run -A https://raw.githubusercontent.com/olavomello/denox/main/cli/main.ts new my-shop
该CLI是一个独立文件:没有外部依赖,也不需要从框架本身导入任何内容。
创建项目
搭建新应用仅需一条命令:
denox new my-shop
脚手架工具的作用远不止是将模板保存到磁盘上。它会加载官方的起始项目,清除该起始项目的Git历史记录,创建一个干净的仓库,将版本号重置为0.1.0,清空变更日志,根据新名称重新编写README文件,并相应地修改denox.config.ts文件。
这样处理后的项目可直接用于开发,而且无需手动清理就能通过项目的deno task ci检查。
自定义模板也同样适用:
denox new my-app --template=<repository>
生成完整功能模块
该命令行工具最强大的功能在于能够通过一条命令生成完整的MVC功能模块。
denox g feature reviews
它不会生成空占位符,而是输出完整的MVC结构API组件:模型和DTO、数据访问层接口及其内存实现与Deno KV实现、服务层、控制器、路由,以及与代码一同存在的OpenAPI描述文件,还有一个基础集成测试框架。
注册操作会自动在src/api/main.ts中完成,因此无需手动配置即可使用该功能。
内置OpenAPI支持
每个生成的组件都配有独立的OpenAPI描述文件。
由此带来的好处包括:
- 文档与实现代码并存
- 路由一致性测试能持续通过
- 运行时:
deno task insomnia
会自动重新生成Insomnia集合相关代码。
无需再手动维护独立的API文档。
安全的代码生成机制
CLI在修改现有代码时会保持谨慎态度。
当缺少或修改了 // denox:features 标记时,该工具会拒绝自动创建插入点。
它仍然会生成新的特性文件,列出需要手动粘贴的精确行号,并且不会改动任何现有的源文件。
错误的名称或重复的特性 ID 会阻止命令执行,从而避免项目结构发生变化。
删除特性
删除操作与生成操作同样重要。
denox rm feature reviews
删除操作的设计目的是防止项目出现故障。
CLI 首先会移除所有对该特性的路由器引用。
只有在应用与相关组件完全断开连接后,才会删除这些文件。
即便处理过程在半途停止,项目也不会出现指向缺失文件的导入引用。
处理完成后,src/api/main.ts 会恢复到生成前的状态:没有孤立的导入引用,也没有多余的空白行。
首先使用以下方式预览:
denox rm feature reviews --dry-run
核心模块保持锁定状态。试图删除内置模块——包括身份验证、用户管理、产品功能、支付系统、健康相关功能以及联系人管理模块——的尝试都会被拒绝。
升级框架
通过以下方式让项目保持最新:
denox upgrade
升级不会覆盖整个文件结构,只有框架所管理的路径会发生变化。
这些路径会在 .denox-core.json 文件中明确列出。
该清单之外的所有内容均保持不变,包括:
- 自动生成的功能模块
- 项目配置文件
- 环境配置文件
- 特定于应用程序的代码
额外的升级模式:
denox upgrade --dry-run
denox upgrade --interactive
denox upgrade --ref=v1.2.0
在开始升级之前,命令行工具会检查 Git 工作目录是否干净。除非用户强制执行,否则未提交的更改会导致升级操作中止,从而避免意外数据丢失。
生成页面
CLI还支持该框架基于文件的路由功能。
denox g page docs/faq
或者
denox g page items/[id]
页面创建后,路由表会自动重新生成。
DenoX CLI的设计理念
CLI遵循框架的原则:在不过度放弃控制权的前提下优先采用约定俗成的方式。
这些原则体现为具体的规则:现有文件不予修改,手动编辑的源代码也不会被重写,具有破坏性的命令会提供--dry-run选项,框架自带的模块不能随意删除,OpenAPI文档会与路由保持关联,同时框架文件与应用代码也会分开存放。
这些措施共同造就了一个简洁、可预测的CLI:减少了冗余代码,同时不会隐藏任何变更内容。