# @configdirector/cli 中文文档

规范地址：https://npmcn.com/package/%40configdirector/cli/

版本：0\.21\.0
npm 元数据更新时间：2026-11-10T18:20:25.531Z
中文译文更新时间：2026-11-10T22:14:15.025Z
软件包许可：MIT

本文由上游 README 翻译，可能存在偏差，请结合原文核对 API、命令与配置。版权与许可归原作者所有。

原始 npm 页面：https://www.npmjs.com/package/%40configdirector/cli
原文对照：https://npmcn.com/package/%40configdirector/cli/?lang=original
项目主页：https://www.configdirector.com/
源码仓库：https://github.com/ConfigDirector/cli

## 关键信息（来自 npm 元数据）

- 包体积（解压后）：358 kB，6 个文件
- 模块格式：ES Module
- TypeScript 类型：未声明
- Node.js 要求：\>=20
- 运行依赖：4 个
- 首次发布：2026-10-17T05:34:53.337Z
- 最新版本发布：2026-11-10T18:20:25.143Z
- 近 30 天下载量：2634（2026-10-11 至 2026-11-09，npm 官方下载统计）
- 已发布版本数：19（近 12 个月 19 个）

## 中文简介

配置主任的命令行工具,管理配置和功能旗服务.

## 安装

```sh
npm install @configdirector/cli
```

也可以使用：`pnpm add @configdirector/cli`、`yarn add @configdirector/cli`、`bun add @configdirector/cli`

## README

# 配置主任 CLI

`configdirector` 是命令行工具,用于 [配置主任](https://www.configdirector.com/),管理配置和特性旗服务。 命令和输出在1.0之前可能会有变化. 这个发布标志会输入一个或多个组织,将一个寄存器链接到一个项目,列出寄存器的代码读取配置密钥的地方,对照项目配置检查这些密钥,显示一个配置的上下文获得的值以及为什么,读取项目的环境,配置,目标规则,段和度量标准,创建并复制一个配置,替换一个环境中的配置目标规则,列出一个实验的运行及其结果和船只或者阻止它们,档案配置,创建,更新并删除了段落和度量标准,上传寄存器对项目的代码引用,并列出并去掉项目的扫描寄存器.

这个 [配置主任文件的 CLI 页面](https://docs.configdirector.com/integrations/cli) 覆盖 GitHub 动作和 GitLab 的 API 令牌、 CI 设置以及每个问题 `validate` 报告意味着你的建设.

## 安装

```bash
npm install --global @configdirector/cli
```

它需要节点.js 20或后. 如果安装 `@configdirector/cli@beta` 0.11.0之前,请再次运行此操作: `@beta` 留在最后一个β上,0.1.0-β.1.

或和Homebrew一起安装,后者负责Node.js:

```bash
brew install ConfigDirector/tap/configdirector
```

Homebrew 公式随每个 npm 发布而更新,所以 `brew upgrade configdirector` 得到最新的一个.

## 签名

在配置总监仪表板上创建 API 令牌, 然后运行 :

```bash
configdirector login
```

代币被保存作为你的签入 它的组织, 只有你能读到它。 你每个组织都有一个签: 跑 `login` 以另一个组织的标志添加一个 `configdirector logout` 删除当前目录中使用的命令中的签名. `configdirector api-token get` 显示该命令将使用哪一个符号及其组织、名称、权限和过期。 在CI中,设置 `CONFIGDIRECTOR_TOKEN` 换句话说.

## 将存储器链接到项目

从寄存器根 :

```bash
configdirector init --project <project-slug>
```

这个写着 `configdirector.json` 与项目的弹壳 及其组织的身份。 交给它,所以每次运行 和每个CI工作使用相同的项目. `init` 通过您的每个登录查找项目, 所以每个寄存器链接到自己的两个组织, 寄存器中有一个命令使用该组织的登录。 另一组织的标志,例如: `CONFIGDIRECTOR_TOKEN` 用于 MCP 服务器的设置, 被拒绝.

## 查找代码读取配置

从寄存器根 :

```bash
configdirector scan
```

`scan` 列出每个代码读取配置密钥的地方,通过一个配置主任SDK或OpenFeature提供商,按密钥分组,并列出每个代码的文件和行。 测试客户端呼叫, 例如 `setValue` 或爪哇语 `@BooleanConfigValue`,并标明为测试. `configdirector scan src` 只扫描 `src`。 。 。 .

当在扫描码的任何地方找到一个字符串指定该名称时,通过常数而不是字符串的调用会在常数键下报告: `const NEW_CHECKOUT = "new-checkout"`,克特林语 `val`时速 `case newCheckout = "new-checkout"`开始 `NewCheckout = "new-checkout"`, Python 键 `NEW_CHECKOUT = "new-checkout"`, C # (韩语) `const string`,以及诸如 `checkoutV2: "new-checkout"` 在物体文字、图表中。 诸如 `FLAGS.checkoutV2` 或者说 `Flag.newCheckout.rawValue` 被查取为姓。 输出显示呼叫后的常数, 如 `getValue(NEW_CHECKOUT)`。一个名称指定了两个不同的字符串,一个是另一个常数的别名,一个在运行时构建的密钥,或者一个从配置中读取的密钥无法解决,所以这些调用被列在它们自己的标题下作为动态引用:扫描无法告诉它们读到的配置.

扫描还查找项目当前和已贬值的密钥,无论这些密钥是否作为这些调用以外的被引用的字符串出现,比如在包装函数,密钥列表或测试固定中,并在密钥下分别作为间接参考报告. 在测试目录或测试名文件中间接引用, 例如 `test/`, (中文(简体) ), `checkout.test.ts`, (中文(简体) ), `checkout_test.go`, (中文(简体) ), `test_checkout.py` 或者说 `CheckoutTests.cs`,被标记为测试,而直接引用则被标记为测试,只有在调用为测试客户端调用时才会被标记为测试. SDK呼叫读取的常数的定义不重复作为间接参考.

当其文件导入 SDK 时, 或导入寄存器的文件时, 如 SDK Docs 创建的设置模块时, 就会找到呼叫 。 在"斯威夫特"和"去"中,当同一"斯威夫特"目标或"去"包"的另一个文件导入SDK时也会被找到,因为这些文件在没有导入的情况下使用对方的申报. 在克特林,Java和C#中,当文件使用你自己的文件导入了SDK的类别时,也会找到它,例如: `object Flags` 或持有客户端的静态类. A 类 `getValue` 除非文件、Swift目标或Go软件包 或您自己使用的类别使用导入其中一种,否则不报告来自另一个库,所以Android的 `SharedPreferences.getBoolean` 和ASP.NET软件 `IConfiguration.GetValue` 在持有客户的类别旁边不报告。 导入深度为一等: JavaScript 和 TypeScript 、 Python 模块中的相对导入和路径别名, 包括您自己的 Dart 文件 `package:` 和同一模块的 Go 软件包。 当导入的文件不导入 SDK 本身时, 扫描会遵循它再出口的内容, 最多两步, 所以 `index` 文件或设置模块前的桶库 `export { client } from "./setup"` 财务报告和审定财务报表 `export * from "./setup"` 在 Java 脚本和 TypeScript 中, `export 'src/setup.dart';` 的相对进口,例如 `from .flags import client` 在 Python 软件包中 `__init__.py`。通过第二个普通导入到达客户端的文件,再出口作为导入写入,然后是单独的 `export`,或者一个普通JS `module.exports` 未扫描。 A 类 去包装是 `.go` 相同目录的文件 `package` 名称,所以一个外部测试包,例如 `package shop_test` 仅通过进口计算。 从最近的 `Package.swift` 或文件上方的 Xcode 工程: 在 Swift 包中, 每个目录在 `Sources/` 或者说 `Tests/` 是一个目标; Xcode 项目的目录是一个目标; 没有, 文件自己的目录就是目标 。 当文件以它命名时, 属于您自己的一类数, 例如 `Flags.kt`, (中文(简体) ), `Flags.java` 或者说 `Flags.cs`,只有该类被读取,而不是它依次使用的类. Kotlin 和 Java 通过文件的导入找到它, 包括 `import static` 和通配符导入,在源目录下 `package` 指向和在它自己的目录文件中,所以在另一个源目录或模块中,一个同一软件包的类,例如测试在 `src/test/java` 使用类别 `src/main/java`,没有被遵循。 当目录不匹配时 `package`,如目录中遗漏了共同的根包,则不遵循导入。 C#发现它是一个 `.cs` 最近的工程中该名称的文件 `.csproj`外边 `bin`, (中文(简体) ), `obj` 和目录 扫描总是跳过, 不管带来 SDK 的命名空间, 一个全局使用。 在文件的顶层声明的Kotlin客户端,在任何对象或类之外,都不被遵循. Nuxt的自动进口堆肥不需要进口. 一个克特林或Java文件属于Android SDK,当上面最近的Gradle构建文件是Android模块时,否则属于Java服务器SDK. 属于 Nuxt 服务器 SDK 的 Nuxt 文件 `server` 最近的目录旁边 `nuxt.config`,另外向 Nuxt 客户端 SDK 发送; Next.js 文件在导入的入口处属于客户端或服务器 SDK .

路径别名, 如 `@/lib/config-director` 解析 TypeScript 解析方式,从 `compilerOptions.paths` 财务报告和审定财务报表 `baseUrl` 以最接近为单位 `tsconfig.json` 在导入文件上方,或 `jsconfig.json` 当目录没有时 `tsconfig.json`。它与相对路径计数相延伸,当它宣布不使用它自己的别名时,它所列出的配置 `references` 和Vite的模板一样。 神经病 `~` 财务报告和审定财务报表 `@` 别名工作一次 `nuxt prepare`,一个 dev 运行或一个建筑已经生成 `.nuxt` 相会. 仅在捆绑器配置中设置的异名, 例如 `resolve.alias` 内 `vite.config.ts` 或网络包装,不遵循。 这些配置和它们指向的文件,如Swift目标或Go软件包的其他文件以及文件使用的克特林、Java和C#类,即使扫描会跳过它们,只要它们低于1 MB;只有C#类在其中 `bin`, (中文(简体) ), `obj` 而扫描总是跳过的目录则不被查找 .

扫描跳过什么 `.gitignore` 忽略 `node_modules`, (中文(简体) ), `vendor`, (中文(简体) ), `build`, (中文(简体) ), `dist` 财务报告和审定财务报表 `target` 目录、 二进制文件和超过 1 MB 的文件 。 单位 `configdirector.json`, (中文(简体) ), `include` 将扫描限制到匹配其光谱的文件,并且 `exclude` 跳过与其相匹配的文件.

与 `--json`, (中文(简体) ), `scan` 打印脚本和CI的引用; `schema/scan-output.schema.json` 在软件包中描述该输出。 每个参考文献都有 `kind`, (中文(简体) ), `direct` 或者说 `indirect`,而从常数中解决的直接参考值将常数作为 `argument`。 。 。 .

JSON中的每一个直接和间接的参考也包含一个 `snippet`:它的行和前后的2行,没有行尾,任何行长超过250个字符被砍到它的前250个. `--context-lines <number>` 包括两侧从0到5行,以及 `--no-snippets` 留下每个片断; 给两个出口带2个。 动态引用没有片段,文本输出显示无.

## 上传扫描到配置主管

从寄存器根, 在默认分支上 :

```bash
configdirector scan --upload
```

`--upload` 将扫描发送到项目,因此仪表板可以显示每个配置读取的地方,以及哪些配置没有读取寄存器. 每次上传都会替换为寄存器保存的所有项目引用. CLI 不检查哪个分支被检查出, 所以运行它推到默认分支, 并保留 `validate` 请求拉动.

该寄存器以其 git 远程路径命名 `origin`,没有主机和 `.git`数字 : `https://github.com/acme/shop.git`, (中文(简体) ), `git@github.com:acme/shop.git` 财务报告和审定财务报表 `ssh://git@github.com/acme/shop.git` 全部上传到 `acme/shop`,而一个 GitLab 分组则保持其整个路径,例如 `group/subgroup/app`。上传还发送远程的 URL,没有用户名和密码 `https` 远程, 如 GitLab CI 设置的工作符, 以及任务检查, 都通过运行读取 `git`。 。 。 . `--repository <name>` 自己命名仓库。 没有它, `scan --upload` 2个出口 `git` 未安装, 当目录不在 git 仓库中, 或者当该仓库没有 `origin` 远程;通过它,每个案件上传时没有远程URL,也没有承诺。 没有承诺但上传到没有承诺的仓库 .

上传包含引用和动态引用 `scan --json` 指纹,随便 `ignoreKeys` 列表,但不能是配置密钥的引用除外,例如一个短于4个字符的引用被忽略和计算。 输出是扫描的,然后是一行命名了寄存器,承诺,项目,发送了多少参考文献,并漏掉了多少. 扫描找不到 2 的源文件退出, 而上传到任何信息, 所以路径错误 或 `include` 永远不会空出寄存器的引用; 一个读取文件但找不到引用上传到空集的扫描 。 与 `--json`,它会打印行政API的回复.

每个直接和间接的引用都随片段一起发送,因此仪表板可以显示其周围的代码; `--no-snippets` 发送没有代码,和 `--context-lines` 设置发送的行数。 当项目代码片段启动时, `scan --upload` 不发送片断并结束 `Code snippets were not sent: this project does not store them.`

一个项目最多拥有50个扫描寄存器,1个上传寄存器最多拥有一万个参考文献,其中包括动态参考文献;其中两个出口为2个. `scan --upload` 需求 `projects:read`, (中文(简体) ), `configs:read` 财务报告和审定财务报表 `code-references:update`。上传不出现在审计日志中.

## 列出并删除扫描的仓库

```bash
configdirector repositories list
```

`repositories list` 列出扫描被上传到项目中的存储器,每行一个在标题行下,并附有承诺,在协调世界时扫描时,它有多少参考文献和动态参考文献,最后显示项目在50个文献中有多少被扫描的存储器:

```txt
REPOSITORY           COMMIT    SCANNED                REFERENCES      DYNAMIC REFERENCES
ConfigDirector/cli   4d40f50   2026-10-17 10:00 UTC   12 references   1 dynamic reference
acme/storefront      9f3e2a1   2026-10-16 09:12 UTC   1 reference     0 dynamic references

web-app has 2 of the 50 scanned repositories a project can hold.
```

未显示承诺而上传的仓库 `no commit`,以及 `--no-headers` 离开标题行。 与 `--json`,它会按收到时打印管理员API的回复,该回复还持有每个寄存器的远程URL以及其扫描读取的文件数量. `repositories list` 需求 `projects:read` 财务报告和审定财务报表 `code-references:read`。 。 。 .

```bash
configdirector repositories remove acme/storefront
```

没有任何东西能单独移除一个被扫描的存储器:一个被重新命名或退役的存储器会保留其上传的最后一个,不停地数到50,而仪表盘会继续使用它的引用来显示每个配置被读取的地方以及没有存储器被读取的配置. `repositories remove <name>` 从项目中删除寄存器及其所有引用, 没有确认, 并打印 `Removed acme/storefront and its code references from web-app.` 要重命名一个寄存器, 删除旧名并上传到新寄存器下; 将重新上传的已删除的寄存器添加回. 当项目中没有扫描寄存器有名称时,它会以2号退出,并列出项目拥有的名称. 与 `--json`,它打印出来 `{ "removedRepository": "acme/storefront" }`,带有给定的名称.

`repositories remove` 需求 `projects:read` 财务报告和审定财务报表 `code-references:update`,以及 `code-references:read` 在无匹配时列出名称。 审计日志中没有删除内容.

## 检查代码读取的密钥

从寄存器根, 或者作为 CI 步骤 :

```bash
configdirector validate
```

`validate` 运行相同的扫描,然后对照工程的配置检查代码读取的每个配置密钥. 它在发现问题后以1号离开,因此在错误的关键船之前建造失败:

-   **未知密钥**:工程中没有配置有密钥,因为其当前密钥或已贬值的密钥,因此SDK总是会返回编码中的默认值. 存档配置的密钥也未知 .
-   **已折旧的密钥**:配置被更名. 输出名称为当前密钥 .
-   **类型不匹配**: 编码中默认值,或名称固定类型为 `getBoolean`,将配置读取为SDK不服务的类型,因此SDK返回了编码中的默认值。 一个布尔读取了布尔配置;一个整数读取了整数,浮出或出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自 一个Terspan在单位中作为数字,所以用数字读取,而不是字符串,例如: `"30s"`。其数值为数字的语句也可以用数字来读取.
-   **可用性不匹配**:客户端SDK只读服务器配置,或服务器SDK只读客户端配置,所以SDK从未收到.
-   **不允许的 Enum 值**: 编码中的默认值不是enum允许的值之一.

测试客户端呼叫, 例如 `setValue` 或者说 `createTestClient`,仅检查未知和已贬值的密钥,因为“配置主任”从未为测试客户端服务。 动态和间接参考文献如下: `scan` 但从来没有检查过, 和一个配置的生命周期状态从来不是一个问题。 要跳过一个密钥, 如相互的项目服务, 请在 `ignoreKeys` 内 `configdirector.json`。 。 。 . `include` 财务报告和审定财务报表 `exclude` 缩小所检查的文件的大小 `scan`。 。 。 .

输出列出按类型分组的问题,文件,行,键和出错,如一个texpan被服务的类型,然后算入所检查的引用. 与 `--json`, (中文(简体) ), `validate` 打印扫描的 JSON 用 `findings` 阵列; `schema/scan-output.schema.json` 描述一下.

## GitHub 动作

这个 [配置代码扫描](https://github.com/ConfigDirector/scan-code) 动作运行 `validate` 根据拉动请求,以及 `validate` 接下来 `scan --upload` 推入默认分支 :

```yaml
- uses: ConfigDirector/scan-code@v1
  with:
    token: ${{ secrets.CONFIGDIRECTOR_TOKEN }}
```

其README列出了每个步骤所需的输入和权限.

## 看上下文对一个配置有什么好处

```bash
configdirector evaluate new-checkout --environment production --context-id 123 --context-trait plan=pro
```

`evaluate` 与 SDKs 所用的评价人员一起评价环境保存了目标设定规则,所以它显示的值是应用程序得到的值. 也展现了符合这个价值的规则,以及每个规则的测试结果和结果:

```txt
new-checkout in Production for user 123

true, served by rule 2

1. 50% get true                     not matched: bucket 71.3 is outside 0 to 50
2. plan is one of pro, team: true   matched
3. in segment Beta testers: true    not evaluated
Default targeting rule: false
```

与名称不匹配的第一个失败条件和上下文对其的价值的规则, 如 `plan is one of pro, team, but it is "free"`,或者桶的百分数 推出上下文。 没有标识符的上下文不会得到桶:它达到的首个百分数推出显示 `rollout skipped: the context has no identifier`,则上下文获得默认目标规则值。 服务于该值的规则之后,或跳出后的规则,不予评价,无法评价的规则显示为错误.

`--environment` 取取环境的弹壳,并需要。 给予上下文三种方式之一:

-   `--context-kind` (默认) `user`, (中文(简体) ), `--context-id`, (中文(简体) ), `--context-name`,以及 `--context-trait name=value` 每个特征。 特性值为字符串; 写入 `name:=` 数字、布尔、数组或对象,如 `--context-trait beta:=true` 或者说 `--context-trait age:=30`用于筑巢特征 `--context-json`。 。 。 .
-   `--context-json '{"identifier": "123", "traits": {"plan": "pro"}}'`,或 `--context-json @context.json` 从文件中读取。 对象要取 `kind`, (中文(简体) ), `identifier`, (中文(简体) ), `name` 财务报告和审定财务报表 `traits`。 。 。 .
-   `--saved-context user:123`,从环境SDK评价中节省出来的上下文类型和标识符。 以所储存的名称和特征对其进行评估.

没有其中任何一个, 配置会被评估为空上下文, 因为一个 SDK 给任何上下文都不会 。 一个被重新命名的配置可以用旧密钥来评价;然后输出以一条给当前密钥取名的行开始. 与 `--json`, (中文(简体) ), `evaluate` 打印所收到管理员 API 的回复.

`evaluate` 需要一个符号 `environments:read` 以及 `projects:read` 财务报告和审定财务报表 `configs:read`,以及 `contexts:read` 页:1 `--saved-context`。没有记录:来自CLI的评价不是SDK活动.

## 浏览工程

```bash
configdirector projects list
configdirector environments list
configdirector configs list [--tag <name>] [--untagged] [--state <state>]
configdirector configs get <key>
configdirector configs activity <key>
configdirector segments list
configdirector segments get <key>
configdirector metrics list
configdirector metrics get <event name>
```

`projects list` 列出您的组织的项目,并列出其鼻涕虫和名称,无论选择哪个项目。 其他命令从 `--project`, (中文(简体) ), `CONFIGDIRECTOR_PROJECT` 或者说 `configdirector.json`,作为 `scan` 是否为:

-   `environments list` 列出环境及其鼻涕虫和名字,标记活生生的.
-   `configs list` 列出其类型、角色、寿命和生命周期状态的配置. `--tag <name>`可重复的,列出任何标签的配置; `--untagged` 列出没有标签的配置, 并且不能与 `--tag`· ; `--state` 列出一个生命周期状态的配置 : `new`, (中文(简体) ), `in-use`, (中文(简体) ), `settled`, (中文(简体) ), `archive-ready` 或者说 `stale`。没有标签的标签名称有2个出口.
-   `configs get <key>` 显示配置的设置,包括类型限制,然后按顺序显示每个环境的目标规则,写作 `evaluate` 写入, 默认目标规则值为最后 。 一个旧的密钥工作,然后输出开始一行来命名当前密钥.
-   `configs activity <key>` 显示SDKs上次评价配置时,每个环境一行,SDK密钥类型,SDK名和SDK版本,时间为UTC.
-   `segments list` 列出每个区段使用多少个配置,以及 `segments get <key>` 显示一个部分的状态组及其环境覆盖.
-   `metrics list` 列出各种计量标准、其方向和每项试验使用的数量,以及 `metrics get <event name>` 显示一个度量衡的种类和方向 以及每一个使用它的实验 其作用和运行环境都在进行中.

```txt
new-checkout
  Description: Shows the new checkout flow
  Type: boolean
  Role: flag
  Lifetime: temporary
  Availability: client and server SDKs
  Lifecycle state: in-use
  Tags: checkout

test
  Default targeting rule: false

production (live)
  1. plan is one of pro, team: true
  2. 30% get true, 70% get false
  3. in segment Beta testers: true
  Default targeting rule: false
```

在实验中,每个值都出现在其变化的名称后,例如: `40% get control (Start free trial), 60% get treatment-a (Try it free for 14 days)`。 。 。 . `evaluate` 以相同方式命名它所服务的变体 `treatment-a (Try it free for 14 days), served by rule 2`,以及 `configs create` 命名默认目标规则值的变异.

`projects list`, (中文(简体) ), `environments list`, (中文(简体) ), `configs list`, (中文(简体) ), `configs activity`, (中文(简体) ), `segments list` 财务报告和审定财务报表 `metrics list` 打印在行上方命名列的页眉行,例如 `KEY TYPE ROLE LIFETIME STATE` 页:1 `configs list`,以及 `--no-headers` 别管了 空列表只打印出句子, 如 `No configs found in web-app.`

与 `--json`中,每个选项都会按收到时打印管理员API的回复,但 `configs list --state`,只打印该状态的配置,以及 `metrics get`,它打印了该度量,作为管理者API将其列为事件名称。 没有配置或段的密钥有2个出口,或一个事件名称没有衡量标准.

`projects list` 需求 `projects:read`。其他人需要 `projects:read` 寻找项目,以及 `environments list` 需求 `environments:read`, (中文(简体) ), `configs list`, (中文(简体) ), `configs get` 财务报告和审定财务报表 `configs activity` 需求 `configs:read`附加时 `tags:read` 页:1 `--tag`, (中文(简体) ), `segments list` 财务报告和审定财务报表 `segments get` 需求 `segments:read`,以及 `metrics list` 财务报告和审定财务报表 `metrics get` 需求 `metrics:read`没有 `segments:read`, (中文(简体) ), `configs get` 显示分区条件的分区ID而不是其名称; 不显示 `environments:read`, (中文(简体) ), `segments get` 用它的ID来命名覆盖环境,而不是它的弹片,以及 `metrics get` 一跑的环境.

## 创建配置

```bash
configdirector configs create --key new-checkout --type boolean --role flag --default-value false
```

`configs create` 从选项中创建一个配置, 匹配管理员 API 的一到一字段, 没有猜测和提示 :

```txt
Created new-checkout in web-app: boolean, flag, temporary, client and server SDKs.
Default targeting rule in every environment: false
```

-   `--key`, (中文(简体) ), `--type` (单位:千美元)`boolean`, (中文(简体) ), `string`, (中文(简体) ), `integer`, (中文(简体) ), `float`, (中文(简体) ), `timespan`, (中文(简体) ), `enum`, (中文(简体) ), `url` 或者说 `json`, (中文(简体) ), `--role` (单位:千美元)`config`, (中文(简体) ), `flag`, (中文(简体) ), `kill-switch` 或者说 `experiment`和 `--default-value` 需要这样做. `--default-value` 是每个环境开始的默认目标规则值,而不是应用程序传递到SDK的编码默认值.
-   `--lifetime` (单位:千美元)`temporary` 或者说 `permanent`用于 `config` 角色。 。 。 角色决定了其他人的生平,所以你可以把它撇出来:一个特征旗帜和一个实验总是暂时的,而一个杀机开关总是永久的. 角色一生没有使用错误.
-   `--description <text>`· ; `--client-only` 或者说 `--server-only`,没有哪一个客户端和服务器 SDKs 都会收到配置; `--variation <name=value>`可重复的,用于实验的变异;以及 `--hypothesis <text>`,一个实验会做什么, 它的每一个运行保持 运行开始时.
-   `--tag <name>`可重复的、项目已有标签的名称,以及 `--new-tag <name>`,可重复,在项目标签目录中创建一个带有该名称的标签. 配置获得两者的标记,最多20个. 每个 `--tag` 在创建任何标签前查找名称, 所以拼写错误 `--tag` 创建无; 没有标签的名称, a `--new-tag` 名称标签已经存在, a `--new-tag` 两次给出名称,一次给出名称,两个选项出口为2。 当后一步失败时, 如按键 , 已经创建的标记会留在目录中, 并且命令名称可以让您通过 `--tag` {\\fn黑体\\fs22\\bord1\\shad0\\3ahbe\\4ah00\\fscx67\\fscy66\\2chffffff\\3ch808080}下次再说.
-   价值观 `--default-value` 财务报告和审定财务报表 `--variation` 在配置类型中读取 : `true` 或者说 `false`,表示整数、浮数或乘数,字符串、 enum 或 URL 的文字,以及 JSON 表示 JSON 配置的文字 `@file` 从文件中读取。 不符合该类型的值是使用错误.
-   限制,每个限制只按其类型接受: `--min` 财务报告和审定财务报表 `--max` (a) 整数、浮出或平方倍; `--exclusive-min` 财务报告和审定财务报表 `--exclusive-max` 整数或浮点; `--unit` (单位:千美元)`milliseconds`, (中文(简体) ), `seconds` 或者说 `minutes`和 `--allow-fractions` 需要时间 `--unit`, (中文(简体) ), `--min` 财务报告和审定财务报表 `--max`· ; `--allowed-value`,可重复,以及 `--enum-value-type string|number` (默认) `string`(一) 铝; `--https-only` a. 用于一个URL,没有这个URL,任何HTTP或HTTPS URL都会被接受;以及 `--json-schema <file>` 为了JSON的配置。 另一种类型的选项是命名它所属类型的用法错误. 时间跨度没有 `--unit`, (中文(简体) ), `--min` 或者说 `--max` 也是使用错误.

```bash
configdirector configs create --key checkout-timeout --type timespan --role config --lifetime permanent \
  --unit seconds --min 1 --max 120 --default-value 30 --server-only
```

当工程已经与密钥有配置时,作为当前密钥或旧密钥,则没有创建: 命令打印出该配置的密钥,类型,角色,寿命和生命周期状态,并带有 1 的退出. 当"配置总监"因其他原因拒绝"配置"时,它会以"2"退出并列出原因. 与 `--json`,它会按接收时打印已创建的配置,或者按键时打印已存在的配置.

`configs create` 需求 `projects:read`, (中文(简体) ), `configs:create`,以及 `configs:read` 显示已有密钥的配置; `--tag` 需求 `tags:read`,以及 `--new-tag` 需求 `tags:create`。在审计日志中显示与源 CLI 的配置.

## 复制配置

```bash
configdirector configs copy search-ranking --key search-ranking --to mobile-app --environment qa=staging
```

`configs copy` 复制密钥下的配置 `--key` 在其项目中提供或与 `--to <project slug>`在该组织的另一个项目中,并打印计划:

```txt
Copied search-ranking in web-app to search-ranking in mobile-app.
Environments:
  production (live)   from production   2 rules copied   rule 3 dropped: mobile-app has no segment beta-testers
  qa                  from staging      1 rule copied
Skipped source environments:
  test   mobile-app has no environment with this slug; create it there to copy its rules
Tags:
  search   matched
  growth   created
```

-   拷贝获得配置的角色,寿命,类型,约束,变异,SDK可用性,描述和标记,以及每个环境的目标设定规则和默认的目标设定规则值. 它开始于一个新的配置,没有旧的密钥,评价或代码引用,与它产生的配置没有任何共享. 无法复制存档的配置 .
-   在另一个项目中,环境以弹道相匹配,以名称为标记,以键为分. 配置项目需要的环境没有相同的相片环境 `--environment <destination slug>=<source slug>`可重复的,以命名其复制的环境; `--environment` 也可以替换弹壳匹配。 源环境没有其弹出环境 .
-   使用一个部分的瞄准规则 另一个项目没有被放弃 计划用它的位置和部分的关键来命名它 当符号已经创建时, 其它工程没有标记 `tags:create`换句话说.
-   `--dry-run` 在不创建任何内容的情况下打印计划, 说明将复制、 丢弃、 跳出和创建什么 .

命令在复制配置或打印计划时以 0 退出, 包括丢出规则, 当配置主任拒绝复制时以 2 退出, 例如, 因为密钥在使用中或环境没有可以复制的内容, 列出它给出的原因 。 与 `--json`,它会按收到时的状态打印管理员API的回复:计划,以及创建的配置与其目标规则,除非 `--dry-run` 被给予.

`configs copy` 需求 `projects:read` 财务报告和审定财务报表 `configs:create`,以及 `tags:create` 以创建标签 。 副本与来源CLI一起在审计日志中显示.

## 更改目标选择规则

```bash
configdirector targeting-rules set new-checkout --environment production --rules rules.json
```

`targeting-rules set` 将一个环境中的配置中每个目标规则替换为文件中的规则,或 stdin中的规则替换为 `--rules -`数字 :

```json
{
  "defaultValue": false,
  "rules": [
    {
      "type": "conditional",
      "order": 0,
      "conditions": [
        {
          "kind": "attribute",
          "attribute": "traits",
          "trait": "/plan",
          "operator": "is one of",
          "targetType": "text",
          "targetValues": ["pro", "team"]
        }
      ],
      "target": "value",
      "value": true
    }
  ]
}
```

-   文件持有 `defaultValue`,默认目标规则值,以及 `rules`和行政主管API所认为的一样 环境进入 `targets` 内 `configs get --json` 具有这样的形状,所以可以编辑并回写。 档案中遗漏的规则被删除.
-   规则、条件或百分比 `id` 得到一个新的, 并给的ID保存.
-   CLI只检查文件持有JSON对象. 配置主任检查规则,当拒绝时,命令出口为2并列出原因.
-   它要求不确认,并像对待其他环境一样对待活的环境。 它印着它写的: `Replaced the targeting rules of new-checkout in production with 1 rule and the default targeting rule value false.` 与 `--json`它印出它发出的请求 并附有它提供的身份证.

`targeting-rules reference` 打印格式:说明如何评价规则、条件类型、条件可以测试的属性,以及上下文类型、区段和每个目标类型的操作符。 与 `--json`,它印出收到的整个文件,包括请求中的JSON Schema `targeting-rules set` 发送。 它的笔记命名了MCP服务器的工具: `update_targeting_rules` 这是什么 `targeting-rules set` 有,而且 `get_config` 什麽 `configs get` 已经.

`targeting-rules set` 需求 `projects:read`, (中文(简体) ), `environments:read` 财务报告和审定财务报表 `config-targeting-rules:update`。 。 。 . `targeting-rules reference` 只需要一个有效的符号而不需要任何工程.

## 实验运行

```bash
configdirector configs runs checkout-cta-copy --environment production
configdirector configs ship checkout-cta-copy --environment production --variation treatment-a
configdirector configs stop checkout-cta-copy --environment production
```

跑步是指实验在一个环境中设定目标规则的时期,其流量被其变异所分割. `configs runs` 列出实验运行在环境里, 最新的第一, 列出每个变化达到多少个不同的环境, 称为曝光, 对照运行开始时配置的共享

```txt
Runs of checkout-cta-copy in production (live), newest first:

Running since 2026-11-03 12:00 UTC
  Hypothesis: Urgency copy raises checkout completion by 5%
  Rollout: everyone not caught by a rule above
    control (Start free trial)              412 exposures   configured 50%
    treatment-a (Try it free for 14 days)   398 exposures   configured 50%
    810 contexts exposed, 3201 evaluations. The split matches the configured shares.
    Primary metric: checkout_completed, conversion, higher is better
      control (Start free trial)              2.9%   control
      treatment-a (Try it free for 14 days)   4.5%   +55% (+12% to +98%)   >99% chance to beat control   likely better
    Guardrail: support_ticket_opened, count per context, lower is better
      control (Start free trial)              0.12   control
      treatment-a (Try it free for 14 days)   0.13   +8% (-10% to +29%)   22% chance to beat control   no clear difference
  Events with no metric: add_to_cart (340 contexts)
  Results can be up to 25 minutes behind.
```

每种度量报告都与度量的作用、事件名称、类型和方向相符合, 然后每变异一行, 控制第一:其价值, 对于其他的度量报告, 升力与控制相对, 其范围可能, 击败控制的机会和判断, `likely better`, (中文(简体) ), `likely worse` 或者说 `no clear difference`。通过三个或三个以上的变化,每行还显示变化是最佳的机会。 在每一个变相都有足够的曝光度之前,推出时表示运行需要更多的曝光度并单独显示值. 终极跑的最后一行说,当它的最后结果,一旦它们进入。 运行还显示了它的假设和它结束的注解,并列出了发送的事件 `track` 运行期间没有衡量标准.

-   `configs ship` 给环境的每个人带来一个变化,结束运行. `--variation` 使用它的名字或身份证。 默认的目标规则值成为变量的值,去掉每个百分比的推出,包括一个有条件的规则服务,一个服务单一值的有条件规则保留.
-   `configs stop` 结束运行时不选择一个变量:每个百分比的推出被删除,包括一个有条件的规则服务,以及默认的目标规则值和任何服务单一价值的有条件规则.

两个都拿 `--note <text>`,最多可有1000个字符说明原因,结束的运行会保持。 两者都打印他们保存的规则,要求不确认,并像对待其他环境一样对待活生生的环境,所以在运行之前检查环境.

`configs ship` 2个出口 `--variation` 匹配实验的任何变体,或几个同名的变体,并用它们的ID列出它们,当配置没有变体时,因为只有实验才有它们. `configs stop` 当配置不是实验或环境没有百分率推出时,退出 2 。 当没有配置键或没有环境时,所有3个出口都带有2个弹片. 与 `--json`,它们会按收到的内容打印行政API的回复.

`configs runs` 需求 `projects:read`, (中文(简体) ), `environments:read` 财务报告和审定财务报表 `configs:read`。 。 。 . `configs ship` 需求 `config-targeting-rules:update`,以及 `configs stop` 需求 `projects:read`, (中文(简体) ), `environments:read` 财务报告和审定财务报表 `config-targeting-rules:update`. 与来源CLI一起在审计日志中装运并停止运行.

## 更改部分

```bash
configdirector segments create --segment beta-testers.json
configdirector segments update beta-testers --segment beta-testers.json
configdirector segments delete beta-testers
```

`segments create` 从文件或从 stdin 创建段 `--segment -`,以及 `segments update <key>` 用它取代段名:

```json
{
  "key": "beta-testers",
  "name": "Beta testers",
  "groups": [
    [
      {
        "kind": "attribute",
        "attribute": "traits",
        "trait": "/email",
        "operator": "ends with any of",
        "targetType": "text",
        "targetValues": ["@example.com"]
      }
    ]
  ],
  "overrides": {
    "7e6d5c4b-3a29-4810-8f7e-6d5c4b3a2918": [
      [
        {
          "kind": "attribute",
          "attribute": "traits",
          "trait": "/email",
          "operator": "ends with any of",
          "targetType": "text",
          "targetValues": ["@staff.example.com"]
        }
      ]
    ]
  }
}
```

-   这个文件保存部分 `key`, (中文(简体) ), `name` 条件 `groups`和行政主管API所认为的一样. `overrides` 具有可选性,并给出了自身环境条件组,由环境的ID键入,环境的ID `environments list --json` 指纹. `segments get --json` 打印此形状的片段, 这样您就可以编辑并将其发回; 字段 API 不使用, 例如 `usages`,则被忽略.
-   没有条件 `id`,在组合或覆盖中,获得一个新的,给定的ID保存.
-   `update` 替换密钥、 名称和组, 因此不同 `key` 重命名片段, 片段保留自己的ID 任意 `id` 档案保存。 无 `overrides` 在文件中,环境将保持原样; `"overrides": {}` 把它们全部取出,一张地图 将那些环境完全覆盖.
-   CLI只检查文件持有JSON对象. 配置主任检查段,当它拒绝时,例如因为另一段有它的密钥,命令以2退出并列出其原因.
-   它要求没有确认。 它印着 `Created segment beta-testers in web-app.` 或者说 `Updated segment beta-testers in web-app.`,然后该段为 `segments get` 显示它。 与 `--json`,它会打印部分,因为管理员 API 返回它.

`segments delete <key>` 删除片段,其环境覆盖,没有确认,并打印 `Deleted segment beta-testers from web-app.`· ; `--json` 指纹 `{ "deletedSegmentKey": "beta-testers" }` 以给定键。 虽然一个配置的目标设定规则使用此段,但在任何环境中,它都不会被删除:命令输出为2并列出每个配置与规则使用它的环境,这样您就可以用 `targeting-rules set` 先说 密钥无段有 2 个出口 `update` 财务报告和审定财务报表 `delete`。 。 。 .

`segments create` 需求 `projects:read` 财务报告和审定财务报表 `segments:create`, (中文(简体) ), `segments update` 需求 `projects:read`, (中文(简体) ), `segments:read` 财务报告和审定财务报表 `segments:update`,以及 `segments delete` 需求 `projects:read` 财务报告和审定财务报表 `segments:delete`没有 `environments:read`,它们用ID来命名环境,而不是用swit. 更改显示在与来源CLI的审计日志中.

## 变化指标

```bash
configdirector metrics create --event-name checkout_completed --kind conversion --kind value-per-context --direction higher-is-better
configdirector metrics update checkout_completed --direction lower-is-better
configdirector metrics delete checkout_completed
```

衡量标准是实验的衡量标准: 应用程序与 SDK 发送的事件名称 `track` 调用,它报告的数字以及高或低的数字更好。 一个项目每个事件名称有一个公制,命令用它的事件名称命名一个公制. 将参数附加到一个实验中发生于仪表盘中的设置标签上,或通过行政API或MCP服务器.

-   `metrics create` 需求 `--event-name`,正好在申请通过之后 `track`· ; `--kind`,可重复: `conversion`, (中文(简体) ), `count-per-context` 或者说 `value-per-context`; 和 : `--direction`数字 : `higher-is-better` 或者说 `lower-is-better`。 。 。 . `--description <text>` 是可选的。 它印着 `Created metric checkout_completed in web-app.`,然后计量为 `metrics get` 显示它.
-   `metrics update <event name>` 更改其选项名称 : `--kind`,重复,替换类型,以及 `--direction` 财务报告和审定财务报表 `--description` 替换它们的; `--description ""` 删除描述。 一个公尺保留它的事件名称。 取消了一种实验的主要度量衡决定, 命令退出时有两个列出这些实验.
-   `metrics delete <event name>` 删除该度量衡,并把它从使用的实验中解开,并打印出来 `Deleted metric checkout_completed from web-app.`· ; `--json` 指纹 `{ "deletedEventName": "checkout_completed" }` 以事件名称命名。 虽然使用度量衡的实验正在进行中,但它并没有被删除:指令用2退出并列出每个实验的运行环境.

皆无相求相. 事件名称无参数带有 2 的退出 `update` 财务报告和审定财务报表 `delete`例如事件名称的第二个参数。 与 `--json`, (中文(简体) ), `create` 财务报告和审定财务报表 `update` 当管理员 API 返回时打印此度量.

`metrics create` 需求 `projects:read` 财务报告和审定财务报表 `metrics:create`, (中文(简体) ), `metrics update` 需求 `projects:read`, (中文(简体) ), `metrics:read` 财务报告和审定财务报表 `metrics:update`,以及 `metrics delete` 需求 `projects:read`, (中文(简体) ), `metrics:read` 财务报告和审定财务报表 `metrics:delete`没有 `environments:read`, (中文(简体) ), `metrics update` 财务报告和审定财务报表 `metrics delete` 以 ID 而不是 swit 命名环境。 更改显示在与来源CLI的审计日志中.

## 归档配置

```bash
configdirector configs archive new-checkout
```

`configs archive` 归档一个配置: 它从项目和SDK接收到的东西中被删除, 因此应用程序会得到它们的代码默认值 。 从仪表板上可以恢复30天,此后被永久删除:

```txt
Archived new-checkout in web-app. It can be restored from the dashboard for 30 days.
```

它不要求确认,也不检查代码是否还读取密钥,所以运行 `configdirector scan` 先说 重新命名的配置可以用旧密钥存档 。 当项目中没有配置时,包含一个已存档的配置的密钥会以 2. 退出. 与 `--json`,它打印出来 `{ "archivedConfigKey": "new-checkout" }`键.

`configs archive` 需求 `projects:read` 财务报告和审定财务报表 `configs:archive`。这些变化显示在与源 CLI 的审计日志中.

## 选项

| 选项 | 环境变量 | 含义 |
| --- | --- | --- |
| `--token <token>` | `CONFIGDIRECTOR_TOKEN` | API标志. 没有两个, 登录保存在 `login` 用于下列组织,或是唯一的登录. |
| `--organization <name or id>` | `CONFIGDIRECTOR_ORGANIZATION` | 其登录使用的组织,以其被保存的名称或代号. 没有两者之一 `organization` 内 `configdirector.json`。不能与符号结合. |
| `--base-url <url>` | `CONFIGDIRECTOR_BASE_URL` | API主机. 默认为 `https://api.configdirector.com`。 。 。 . |
| `--project <slug>` | `CONFIGDIRECTOR_PROJECT` | 发射弹 没有这两个,每个读取项目的命令都使用 `project` 内 `configdirector.json`。 。 。 . |
| `--json` |  | 打印JSON在 Stdout。 错误总是去 stderr . |

命令在成功时以 0 退出, 1 当 `validate` 发现问题或 `configs create` 找到一个已经拥有密钥的配置, 当它无法运行时 2 : 使用错误, 被拒绝的令牌, 中止服务, 无法获取的 API, 或一些不存在的命令名, 如配置密钥, 环境, 保存上下文, 分区密钥, 标记或扫描寄存器 . `segments delete` 当一个配置的目标规则使用段时,也会以2退出. 因此,CI工作可以从断电中分辨出一个错误的配置密钥.

## 许可证

[麻省理工学院](https://npmcn.com/package/%40configdirector/cli/LICENSE)

## 常见问题

### @configdirector/cli 是什么？

配置主任的命令行工具,管理配置和功能旗服务\.

### 如何安装 @configdirector/cli？

在项目目录运行 npm install @configdirector/cli，或使用 pnpm add / yarn add / bun add。它还提供命令行工具 configdirector，可以用 npx configdirector 直接运行。

### @configdirector/cli 支持 TypeScript 吗？

该包的 package\.json 没有声明类型入口。需要类型提示时，可以在 npm 上查找社区维护的 @types/configdirector\_\_cli 是否存在。

### @configdirector/cli 支持 ESM 还是 CommonJS？

以 ES Module 形式发布，推荐使用 import 引入。在 CommonJS 项目中，Node\.js 20\.19\+ / 22\.12\+ 可以直接 require\(\) 不含顶层 await 的 ES Module，更早的版本需要改用动态 import\(\)。

### @configdirector/cli 需要什么版本的 Node\.js？

package\.json 的 engines 字段要求 Node\.js \>=20。版本不符时 npm 默认只给出警告，开启 engine-strict 后会拒绝安装。

### @configdirector/cli 可以商用吗？

@configdirector/cli 使用 MIT 许可。宽松许可：允许商业使用、修改和再分发，通常只需在分发时保留原版权与许可声明。以上为概括，不构成法律意见，请以许可原文为准。

### @configdirector/cli 的下载量有多少？

根据 npm 官方下载统计，@configdirector/cli 在 2026/10/11 – 2026/11/09 这 30 天内被下载 2,634 次，日均约 88 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入，适合横向比较热度，不能直接等同于使用人数。

### @configdirector/cli 还在维护吗？

最新版本 0\.21\.0 发布于 2026/11/11（今天）；至今共发布 19 个版本，其中过去 12 个月发布了 19 个；首次发布于 2026/10/17。发布频率只是参考信号：功能稳定的工具可能很少需要更新，建议结合源码仓库的 issue 和提交记录判断。

