背景
当前 ObjectStack CLI 基于 Commander.js,自定义了一套插件注册机制(loadPluginCommands)进行命令扩展,但:
- 存在命令入口冲突(spec 和 cloud 各有 @objectstack/cli,bin 均为 os)
- 插件自动发现机制依赖项目 config 文件,导致 os login、os push 等云端命令在未初始化项目时无法使用(鸡蛋问题)
- 插件注册、加载、失败处理、版本兼容等都需自维护
行动目标
迁移 ObjectStack 主 CLI 架构为 oclif,以便:
- 主 CLI 与云端/第三方插件通过 oclif 内置机制解耦,bin/os 统一
- 删除自定义 loadPluginCommands 等机制,利用 oclif 自动命令发现与插件注册
- 按 oclif 典型结构将 packages/cli/src/commands 分为本地开发相关子命令包
- 为 cloud 项目的云端命令预留 plugin 注册入口
工作内容
- 使用 oclif 脚手架生成新的主 CLI 骨架(bin: os)
- 将现有本地相关命令(init、dev、serve、plugin、compile、validate、generate、create、test、doctor、lint、diff、explain、codemod 等)迁移为 src/commands/ 下对应 TS class
- 保持主 CLI package.json 的 bin/os 唯一性,移除独立 cloud cli
- 移除 loadPluginCommands,相关扩展点迁移为 oclif plugins
- 提供插件注册与文档说明
验收标准
- 用户全局安装 @objectstack/cli 后直接获得 "os" 主命令、所有子命令与自动 help
- cloud 项目的命令可通过 plugin 引入自动获得
- 项目内 objectstack.config.ts plugins 不再决定主 CLI 命令集合
- 提供迁移文档、测试用例
如需临时平滑迁移方案,可支持 Commander.js/oClif 双栈过渡一段时间。
背景
当前 ObjectStack CLI 基于 Commander.js,自定义了一套插件注册机制(loadPluginCommands)进行命令扩展,但:
行动目标
迁移 ObjectStack 主 CLI 架构为 oclif,以便:
工作内容
验收标准
如需临时平滑迁移方案,可支持 Commander.js/oClif 双栈过渡一段时间。