Skip to content

迁移 CLI 架构到 oclif,实现主 CLI 与插件自动分离 #703

Description

@hotlong

背景

当前 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 注册入口

工作内容

  1. 使用 oclif 脚手架生成新的主 CLI 骨架(bin: os)
  2. 将现有本地相关命令(init、dev、serve、plugin、compile、validate、generate、create、test、doctor、lint、diff、explain、codemod 等)迁移为 src/commands/ 下对应 TS class
  3. 保持主 CLI package.json 的 bin/os 唯一性,移除独立 cloud cli
  4. 移除 loadPluginCommands,相关扩展点迁移为 oclif plugins
  5. 提供插件注册与文档说明

验收标准

  • 用户全局安装 @objectstack/cli 后直接获得 "os" 主命令、所有子命令与自动 help
  • cloud 项目的命令可通过 plugin 引入自动获得
  • 项目内 objectstack.config.ts plugins 不再决定主 CLI 命令集合
  • 提供迁移文档、测试用例

如需临时平滑迁移方案,可支持 Commander.js/oClif 双栈过渡一段时间。

Metadata

Metadata

Labels

No labels
No labels

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions