Skip to content

配置参考 ​

本页用于查阅 matrix.config.ts 的字段、默认值和覆盖契约。概念及多变体示例见核心概念。

根配置 ​

在工作区根目录使用 matrix.config.ts,导出 defineMatrixConfig({...}),并从该目录运行 CLI。以下表格描述用户配置,不是标准化执行计划的输入。

字段类型/默认值作用
projectsProject 映射;必填可复用项目目录和命令。
productsProduct 映射;必填由绑定项目的变体组成的交付物。
envScalar 映射;可选全局 string、number、boolean 环境值。
$env环境映射;可选全局环境覆盖,每个条目包含 env。
envSchema字段映射;可选共享类型、默认值和可选性,见环境变量 schema。
suffixes环境 → suffix 映射;可选产品身份的默认环境后缀。
artifacts.rootstring;artifacts相对于工作区根目录的产物目录,本身不启用产物交付。
artifacts.retention.keep正整数;5每个产品、环境、变体保留的产物集合数量。

Project ​

准备流程见执行说明,支持的配置文件名与类型生成见构建工具接入。修改 configFile 不会修改 target 命令。

字段类型/默认值作用
rootstring;.相对于工作区根目录的项目目录,也是命令工作目录。
targetsTarget 映射;必填项目命令;内置目标名只提供默认值,不自动提供命令。
preparestring 或非空 string 数组;可选每次调用、每个项目最多执行一次的有限准备命令。
configFilestring;可选相对于项目根目录的宿主配置,仅用于 matrix prepare。

Product ​

CLI 使用产品 key;稳定产品 ID 可以与 key 不同。

字段类型/默认值作用
variantsVariant 映射;必填属于当前产品的变体 key,每个条目引用一个项目。
idstring;产品 key稳定产品 ID。
name, slugstring;产品 key展示名称及文件系统相关身份。
appIdstring;可选应用标识。
versionSemVer string;可选发布版本,见产品发布版本。
env, $env可选产品环境值及分环境覆盖。
suffixes环境 → suffix 映射;可选产品级身份后缀。

Variant ​

Variant 可以是项目 key 字符串,如 web: 'web',或对象。Variant 不单独声明 env、$env 或 envSchema;应用差异应放在产品环境值中,必要时拆分项目或产品。

字段类型/默认值作用
projectstring;必填已存在的项目 key。
name, slug, appIdstring;继承产品当前变体的身份覆盖。
versionSemVer string;继承产品变体发布版本。
suffixes环境 → suffix 映射;可选变体级身份后缀。
targets覆盖映射;可选覆盖项目目标,或添加带命令的新目标。

Target 覆盖 ​

对象覆盖保留未指定的项目目标字段;readyWhen、artifacts 与原有设置合并。显式提供的 dependsOn 数组替换原依赖列表,因此 dependsOn: [] 可以移除继承依赖。字符串或字符串数组覆盖会替换整个目标并重新应用目标名默认值,不保留原依赖、产物或就绪探测设置。

例如 build: { command: 'pnpm build:desktop' } 保留原 build 设置,而 build: 'pnpm build:desktop' 会重置它们。新增的对象目标必须提供 command。

Target ​

目标支持命令字符串、按顺序执行的非空字符串数组或对象;命令均须非空。命令通过系统 shell 在项目根目录执行,引号语法及可用命令取决于平台。持续目标不支持命令数组。各内置目标的默认值见目标默认值。

字段类型/默认值作用
commandstring 或 string 数组;必填命令或顺序执行的步骤。
prepareboolean;除非为 false,否则允许准备仅为当前目标跳过项目准备。
continuousboolean;由目标名决定持续服务,而非有限任务。
nodeEnvdevelopment、production、test;由目标名决定生成的 NODE_ENV 和 MATRIX_NODE_ENV。
readyWhen端口探测;可选下游请求就绪条件时使用的探测。
dependsOn依赖数组;[]先执行同一产品中的其他变体。
outputDirstring;dist相对于项目根目录的输出目录。
artifacts对象;默认不配置为有限目标启用产物交付;{} 表示启用默认设置。

就绪探测 ​

探测配置在被依赖的服务上,而不是消费它的目标上:

字段类型/默认值作用
type必填 'port'当前仅支持 TCP 端口就绪探测。
port整数 1–65535;必填必须能接受 TCP 连接的端口。
hoststring;127.0.0.1探测主机。
timeout正整数;30000最长等待时间,单位毫秒。
ts
import { defineMatrixConfig } from '@xova/matrix'

export default defineMatrixConfig({
  projects: {
    web: {
      root: './apps/web',
      targets: {
        dev: {
          command: 'pnpm dev',
          readyWhen: { type: 'port', host: '127.0.0.1', port: 5173, timeout: 30_000 },
        },
      },
    },
  },
  products: { app: { variants: { web: 'web' } } },
})

端口可连接不代表 HTTP/API 健康,也不证明端口属于该进程。未配置 readyWhen 时,ready 依赖在进程启动后直接继续,不执行探测;matrix doctor 会对此警告。没有下游依赖的服务不会因为配置探测而自动进行全局启动检查。

依赖 ​

使用 dependsOn: ['web'],或 dependsOn: [{ variant: 'web', target: 'build', condition: 'completed' }]。

字段类型/默认值作用
variantstring;必填同一产品内的变体 key,不是项目 key。
targetstring;当前目标名在依赖变体上执行的目标。
conditionready 或 completed被依赖目标持续运行时默认 ready,否则默认 completed。

依赖递归展开并先于消费目标执行;循环、缺失变体或目标均报错。--variant 选择入口变体,不移除它们的依赖。对持续服务使用 completed 会等待服务退出,通常不合适。

产物设置 ​

这些设置属于 target 的 artifacts;目的目录和保留数量属于根级 artifacts,见产物交付。

字段类型/默认值作用
modemove、archive、both;move移动目录、压缩归档,或移动并在其中放入归档。
formatzip 或 tar.gz;zip压缩格式;仅移动时不使用。
cleanboolean;true有限目标执行前清理输出目录。

身份后缀 ​

每个 suffixes.<environment> 条目支持可选的 name、slug、appId 字符串:

ts
import { defineMatrixConfig } from '@xova/matrix'

export default defineMatrixConfig({
  projects: {},
  products: {},
  suffixes: {
    staging: { name: ' (Staging)', slug: '-staging', appId: '.staging' },
  },
})

当前环境的 suffix 字段按 global < product < variant 合并;更具体的同名字段覆盖前一级,不逐级拼接后缀。最终 suffix 在合并环境中的身份覆盖解析后只追加一次。例如 com.example.app 变为 com.example.app.staging。缺失的 appId 仍然缺失;suffix 不改变产品 key、稳定 ID 或发布版本。

产品发布版本 ​

多个产品复用同一项目时,可以分别声明发布版本;变体也可以覆盖产品版本:

ts
import { defineMatrixConfig } from '@xova/matrix'

export default defineMatrixConfig({
  projects: {
    desktop: {
      root: './apps/desktop',
      targets: { build: 'pnpm build' },
    },
  },
  products: {
    alpha: {
      version: '2.0.0',
      variants: { desktop: 'desktop' },
    },
    beta: {
      version: '3.0.0',
      variants: { desktop: { project: 'desktop', version: '3.1.0-rc.1' } },
    },
  },
})

解析优先级为 MATRIX_PRODUCT_VERSION > variant.version > product.version > 项目 package.json 的 version。环境变量沿用全局/产品 env、$env、dotenv、Shell 的现有合并顺序。版本使用 SemVer(支持预发布与构建元数据),不拼接环境 identity suffix;无效的显式版本直接报错,不回退。

版本在生成执行计划时确定,同步写入任务 version、子进程的 MATRIX_PRODUCT_VERSION 和构建期 matrix.product.version,产物命名使用同一个值。Matrix 不修改源 package.json,也不自动修改应用打包器的版本配置。例如 electron-builder 可以通过 extraMetadata: { version: process.env.MATRIX_PRODUCT_VERSION } 使用该版本。

没有显式版本时读取所选项目的 package.json(不向父目录查找)。非产物任务允许文件或 version 字段缺失,此时不注入版本;启用产物交付的非持续任务必须解析到有效版本。已有显式版本时不要求项目提供 package.json。