Skip to content

DEV-001: 开发指南

1. 开发期调用

在 monorepo 中开发时,无需全局安装即可调用 CLI:

bash
# 方式 1: node 直接运行
node packages/cli/dist/cli.mjs analyze ./docs

# 方式 2: pnpm exec
pnpm -F @cmtx/cli exec -- cmtx image analyze ./docs

cmtx image analyze ./docs

开发模式(自动重新构建):

bash
pnpm -F @cmtx/cli dev

2. CLI 参数命名与格式规范

所有 CLI 命令的参数命名和格式必须遵循以下规则。

2.1. 命名一致性

CLI 参数名(kebab-case)与 YAML 配置字段名(camelCase)必须满足可逆映射:去掉所有连字符后得到的单词序列与 YAML 字段名一致

yaml
# YAML 配置字段 (camelCase)
upload:
  conflictStrategy: skip    # camelCase 复合词
  prefix: ""                # 单字

# CLI 参数 (kebab-case)
--conflict-strategy skip    # 去掉连字符 = conflictStrategy ✅
--prefix ""                 # 单字,直接一致
CLI(kebab-case)YAML 字段(camelCase)关系
--prefixprefix完全一致
--conflict-strategyconflictStrategykebab→camel 转换
--outputoutput完全一致

2.2. 参数归属分层

归属层判定标准示例
CLI 参数"每次运行可能不同"(运行时决策 + 高频切换)--provider, --bucket, --region, --prefix, --conflict-strategy
YAML 配置"一设不改"(项目级约定、结构性参数)namingTemplate, replace.fields, imageFormat, delete

禁止将配置级参数扁平化为 CLI 参数以保持 CLI 简洁。

2.3. 参数格式

规则示例
使用 --long-option 长格式,非单字母短格式是默认形式--conflict-strategy
短别名(alias)可选,用单个字母-c 对于 --config
值类型显式声明:string / boolean / number / choice--provider aliyun-oss
布尔型参数用 --flag 形式(不存在 --no-flag 在 CLI 层)--verbose

2.4. 移除废弃参数

删除参数时,同时从 builder、handler、类型定义、文档中移除。废弃参数不允许长期存留在 builder 中(避免误用和代码臃肿)。

2.5. 示例:upload 命令参数表

bash
cmtx upload <filePath> [options]
参数别名类型对应 YAML 字段说明
--config-cstring配置文件路径
--provider-pstringstorages.xxx.provider云存储提供商
--regionstringstorages.xxx.config.region存储区域
--bucketstringstorages.xxx.config.bucket存储桶
--prefixstringupload.prefix远程路径前缀
--conflict-strategystringupload.conflictStrategy冲突处理策略
--verbose-vboolean详细输出

基于 MIT 许可发布