moon 是面向多语言 Monorepo 的构建与任务编排工具,核心用途包括:管理含多个项目或包的仓库、跨项目编排有依赖关系的任务、缓存构建产物以加速本地与 CI 构建、统一管理 Node.js/Rust/Python/Go 等工具链版本、生成项目与依赖图谱。
主要能力:通过 .moon/workspace.yml 配置工作区与项目发现,通过 moon.yml 定义项目级任务。目标语法支持 project:task、:task(所有项目)、#tag:task(按标签)、^:task(上游依赖)。任务可配置 inputs/outputs 实现缓存,并支持 deps、env、extends、preset 等字段。任务可通过 .moon/tasks/*.yml 全局继承。
常用命令:moon run <target>、moon run :lint、moon run '#tag:test'、moon ci、moon check --all、moon query projects、moon project-graph。受影响检测:moon run :test --affected、moon ci :test --base origin/main。Docker 支持:moon docker scaffold/setup/prune/file。查询语言 MQL 可按 language、stack、tag 等过滤。
使用方式:配置 workspace.yml、toolchains.yml 与 moon.yml;v2 中 toolchains.yml 为复数,tasks.yml 改为 tasks/*.yml,type 重命名为 layer,shell 特性任务用 script。CI 中需 fetch-depth: 0 以便受影响检测。
限制与注意:v2 存在破坏性变更,需运行 moon migrate v2 迁移;部分语言(PHP、Ruby)为二级支持,Bash/Batch 仅项目分类。其他细节暂未提供。