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 双栈过渡一段时间。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

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