# @conformetry/configuration 中文文档

规范地址：https://npmcn.com/package/%40conformetry/configuration/

版本：0\.0\.78
npm 元数据更新时间：2026-11-10T14:25:27.369Z
中文译文更新时间：2026-11-10T15:24:09.577Z
软件包许可：MIT

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

原始 npm 页面：https://www.npmjs.com/package/%40conformetry/configuration
原文对照：https://npmcn.com/package/%40conformetry/configuration/?lang=original
项目主页：https://github.com/organizzolini/codebase/tree/main/projects/ic-suite/conformetry/conformetry-configuration#readme
源码仓库：https://github.com/organizzolini/codebase

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

- 包体积（解压后）：111 kB，6 个文件
- 模块格式：ES Module
- TypeScript 类型：包内自带
- 运行依赖：9 个
- 首次发布：2026-10-04T22:26:14.996Z
- 最新版本发布：2026-11-10T14:25:26.887Z
- 近 30 天下载量：12490（2026-10-11 至 2026-11-09，npm 官方下载统计）
- 已发布版本数：75（近 12 个月 75 个）

## 中文简介

配置读取器、 方案验证和模板发现

## 安装

```sh
npm install @conformetry/configuration
```

也可以使用：`pnpm add @conformetry/configuration`、`yarn add @conformetry/configuration`、`bun add @conformetry/configuration`

## README

# QQ 调和配置

[![npm](https://img.shields.io/npm/v/@conformetry/configuration?logo=npm&label=npm)](https://www.npmjs.com/package/@conformetry/configuration)

**配置参考 [调和](https://npmcn.com/package/%40conformetry/conformetry-cli/README.md)。 。 。 .**

`@conformetry/configuration` 读取寄存器 `conformetry.config.*`检查 它,并把它变成三个东西 其余的工具链工作从: 生成器注册、实例验证和 已解析的输入 .

```bash
npm install --save-dev @conformetry/configuration
```

大多数消费者从不直接安装这个 `@conformetry/cli` 财务报告和审定财务报表 `@conformetry/nx` 两者都取决于它。 输入时安装 配置文件,或者在您自己的一个主机中嵌入相容性 .

## 配置文件

文件的扩展名可能是 `.ts`, (中文(简体) ), `.mts`, (中文(简体) ), `.cts`, (中文(简体) ), `.js`, (中文(简体) ), `.mjs`, (中文(简体) ), `.cjs`, (中文(简体) ), `.json`,或 `.jsonc`。路径总是以明确的方式通过 — 没有文件名 寻找。 类型脚本和 JavaScript 文件通过加载 [吉地语](https://github.com/unjs/jiti),所以一个 `.ts` 配置不需要构建步骤, 也可以从工作空间导入 .

路径首先针对当前目录解决,然后针对 工作空间根——通过向上走来定位 `pnpm-workspace.yaml` 这么说 相对于根的配置路径仍然从嵌入中解析 目录.

文件默认导出a **生成器定义数组**。这是一个阵列 而不是按键记录,因为一个生成器的名字已经是一个字段,和一个 记录使名字真实化 在两个地方一次.

```ts
import { type ConformetryConfiguration } from "@conformetry/configuration";

const conformetryConfiguration: ConformetryConfiguration = [
  {
    description: "Generate a NestJS service module",
    inputs: {
      name: { description: "Module name in kebab-case", type: "string" },
    },
    instances: [{ patterns: ["packages/*/src/modules/*"] }],
    name: "nestjs-service-module",
    templatePath: "templates/nestjs-service-module",
  },
];

export default conformetryConfiguration;
```

### 发电机田

| 外地 | 需求 | 目的 |
| --- | --- | --- |
| `name` | ✅ | 如何处理生成器, 以及其排放的文件名 |
| `templatePath` | ✅ | 模板文件夹,相对于工作空间根 |
| `inputs` |  | 它的取而代之的值,如 JSON Schema 碎片 |
| `instances` |  | 此生成器输出已存在的地方 |
| `description` |  | 当主机列出或提示生成器时显示 |
| `hooks` |  | `preGenerate` 财务报告和审定财务报表 `postGenerate` 函数环绕渲染;见 [`@conformetry/generation`](https://npmcn.com/package/%40conformetry/conformetry-generation/README.md) |

两者 `inputs` 财务报告和审定财务报表 `instances` 可省略。 两者均无的生成器 一个没有经过验证的固定模板,这是合法的.

### 被拒绝的

计划失败了 而不是证实什么 并且每一次报告 一个问题:

-   **两台发电机同名响应.** 一个主机解决第一个 相匹配,所以碰撞不会错误 它使用的地方—— 它默默地阴影, 失去的生成器无法到达 配置 .
-   **两台发电机共用 a `templatePath`。 。 。 .** 验证然后查找实例 两者平等,并报告为无与伦比.
-   **含有路径分隔符的名称 .** 生成器的地址是它的名称 并释放到一个以它命名的文件.
-   **密钥计划没有声明 .** 生成对象很严格,所以 拼写错误的字段——或 `aliases`被彻底删除,但被拒绝 而不是剥去衣服 离开阅读 好像它生效.
-   **非函数的钩子, 或未知的密钥 `hooks`。 。 。 .** A 类 函数的字符串或对象以其钩子命名,以及 `hooks` 出于同样的原因, 生成器是: 一个错误的钩子名称 否则会被剥去 钩子不会悄悄跑掉.

## 实例

`instances` 是使验证成为可能的原因。 上面写着发电机在哪里 输出已经存在, 因此验证知道要检查什么而不被告知 再来一次.

```ts
instances: [
  { patterns: ["packages/*/src/modules/*"] },
  {
    patterns: ["applications/*/src/modules/*"],
    substitutions: { type: "applications" },
  },
];
```

| 外地 | 目的 |
| --- | --- |
| `exclude` | 工作空间 - 相干光彩的命名路径,这些路径从来不是实例,无论是否应用 `tags` |
| `patterns` | Globs 查找这个组的例, 工作空间相对 |
| `substitutions` | 为此组提供模板占位符的值 |
| `tags` | 选择该组适用于哪个主机的标签, 未解释 |
| `threshold` | 最低的符合分数 这些例子可能 超过发电机 |

群体存在,因此替代物可以与普通人不同. `type` 实值 `packages` 一个 一组路径和 `applications` 对于另一个,没有通用规则可以告诉他们 分开.

> **这些替代物的占位符被从实例中读出.** 校正使它成为随机的站点, 抓取文本实例 将模板的首次使用控制在哪个位置, 使模板再次生效 与该文本进行比较,并照常加以比较——因此,以后使用时持有不同的文本 是一种普通的区别。 当无配对时, 实例失败 `Could not infer {{…}}`。 。 。 . `name` 它的变体总是来自 实例路径,这里提供的值总是获胜。 一代没有 实例读取,所以有一个占位符 无人提供仍然提高 `MissingSubstitutionError` 看到了吗 [`@conformetry/generation`](https://npmcn.com/package/%40conformetry/conformetry-generation/README.md) 为什么,和 对于一节语法,模板用于使占位符具有可选性.

`exclude` 丢弃任何自己路径的实例——找到的图案目录,或 文件实例的文件 – 匹配其中的一格, 无论是否 组有 `tags`它是如何销售或生成代码 生活在真实的 实例, 如 shadcn 组件输出, 不被验证 : `exclude: ["projects/lexico/lexico-web/src/components/ui/**"]`。 。 。 .

`tags` 由这个没有概念的包件携带 主机可以匹配标签. [`@conformetry/nx`](https://npmcn.com/package/%40conformetry/conformetry-nx/README.md) 将其读取为 Nx 工程标记并解决每个组的光滑 _内部_ 每个 匹配项目; 另一个主机可以自由读取它们作为其它东西 。 一组 仅命名 `tags` 合法——它不定位地选择,这就是 模板,尚未需要实例.

### 目录 globs 相对于文件 globs

两者故意表现不同 不同之处在于 小模板胜于大模板.

-   A 类 **目录缩写** 打开相配的瞄准镜 和最大的相配器 模板获胜.
-   A 类 **文件阴影** 将范围缩小到匹配的文件, 所以模板 准确描述这些文件比描述整个文件更合适 目录.

双文件模板是这样的 `nestjs-service-file` 可匹配时间 在一个目录中,一个五文件模块模板也声称:

```ts
instances: [
  { patterns: ["src/modules/*/*.service.ts", "src/modules/*/*.service.unit.test.ts"] },
];
```

### 设置模板的地方

生成一个 _文件夹_ 包含该文件夹, 因此它的实例路径 是文件夹的 **父目录**数字 : `nestjs-service-module` 持有 `{{nameKebabCase}}/…`, (中文(简体) ), 其实例是: `…/src/modules`。生成松散文件的模板 它的实例路径是这些文件的目录 进去.

## 阈值

当符合标准分数达到临界值时 对它适用。 3级设置,最窄取胜:

```ts
instances[].threshold ?? generator.threshold ?? runThreshold ?? 1
```

一个未设置的级别保持不变,而不是被默认填充——即 是让一个主机自己 `--threshold` 到达一个生成器已经 没有意见。 默认 `1` 只在链末端应用,所以 任何配置都没有悄悄地被覆盖,没有设定等级 安静地对待他们.

```ts
{
  name: "nestjs-service-module",
  templatePath: "templates/nestjs-service-module",
  threshold: 1,                               // strict everywhere by default
  instances: [
    { patterns: ["packages/*/src/modules/*"] },
    {
      patterns: ["applications/legacy/src/modules/*"],
      threshold: 0.75,                        // …except while migrating this one
    },
  ],
}
```

当两个组找到具有不同阈值的同一实例时 最严格的胜利:没有任何东西能使一个团体比另一个更具体,让 命令决定意味着一个宽大的群体 可以默默地放松酒吧 别人 设置.

## 投入

每个条目 `inputs` 是一个JSON Schema碎片。 仅 `properties` 财务报告和审定财务报表 `required` 读取——足够知道一个输入的名称,是否必须是 供货,以及劝说的时候要说什么.

用手写作是动词,所以从一个图案库中衍生出来 通常做法:

```ts
import { z } from "zod";

function defineInputs(shape: z.ZodRawShape) {
  return z.toJSONSchema(z.object(shape)).properties ?? {};
}

inputs: defineInputs({
  name: z.string().describe("Module name in kebab-case"),
  project: z.string().describe("Parent project name in kebab-case"),
});
```

数值按顺序解决:先在命令行上传递旗帜,然后 仍然缺少的交互式提示 。 提示被完全跳过 当 Stdin 不是 TTY 或 `CI` 实值 `true`,因此缺少输入失败命令 而不是挂起来.

## 匹配

校验不记录哪个模板生成文件 。 它的工作原理是: 每个实例与每个模板的比分 文档中已有实例,最合适者获胜.

报告两个结果,而不是跳过,因为作者是一个表白 声称这些道路 _为:_ 实例 :

| 原因 | 含义 |
| --- | --- |
| `no-match` | 没有模板能很好地解释这个实例 |
| `ambiguous` | 两个或两个以上的模板捆绑,所以它们在这里无法区分 |

## 出口

| 导出 | 目的 |
| --- | --- |
| `ConfigurationService` | 此层的所有答案: 加载配置文件、 读取模板、 将 globs 扩展为例、 匹配两者、 渲染占位符并解析生成器输入 |
| `ConfigurationModule` | 提供它的NestJS模块 |
| `ConfigurationPathRequiredError` | 被丢弃 `ConfigurationService.requireConfigurationPath` 对于缺失或空白的路径,请指定调用者在表面通过的旗帜或选项 |
| `ConformetryConfiguration` | 已装入的配置类型—— 将您的配置写为此 |
| `ConformetryInstanceGroup`, (中文(简体) ), `ConformetryGeneratorDefinition` | 以上各项的外地一级类型 |
| `GeneratorHook`, (中文(简体) ), `GeneratorHookContext`, (中文(简体) ), `GeneratorHooks` | 钩子类型,从 `@conformetry/core` 因此一个配置文件可以从此包中键入它的钩子 |

**一个服务和一个模块,没有其他合作者** - 同一对 `@callidescope/configuration`, (中文(简体) ), `@codependix/configuration` 财务报告和审定财务报表 `@codometer/configuration` 出版,所以学习其中之一 教会大家 他们.

外观后面,模板发现,实例发现,渲染,实例 组合,输入解析度在6个单独的文件中保留6个单独的类, 因为他们是六个不同的工作。 他们不是6个切入点 主机必须知道名称: 消费者进口 `ConfigurationModule` 财务报告和审定财务报表 注射数 `ConfigurationService`。 。 。 .

是否需要配置路径, 以及拒绝的内容是 在这里决定了,没有别的地方: `ConfigurationService.requireConfigurationPath(path, surface)` 返回已调整路径或抛出路径 `ConfigurationPathRequiredError`. 国家行动倡议 通过 `the --config flag`Nx插件通过自己的选项名称; 既不保守秘密,也不传达自己的信息.

装入配置文件是一个任务 `ConfigurationService` 持有 本身;所有触及路径的事物都是单行交接 拥有它的合作者.

## 测试

```bash
nx run conformetry-configuration:vitest
```

## 许可证

麻省理工学院——见 [自由主义](https://npmcn.com/LICENSE)。 。 。 .

## \* 调和

这个项目源于 [巢-服务-项目](https://npmcn.com/configuration/conformetry-templates/nestjs-service-project) 符合模板.

## 常见问题

### @conformetry/configuration 是什么？

配置读取器、 方案验证和模板发现

### 如何安装 @conformetry/configuration？

在项目目录运行 npm install @conformetry/configuration，或使用 pnpm add / yarn add / bun add。

### @conformetry/configuration 支持 TypeScript 吗？

支持。包内自带 TypeScript 类型声明（package\.json 声明了 types 入口），安装后即可获得类型提示，无需再安装 @types 包。

### @conformetry/configuration 支持 ESM 还是 CommonJS？

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

### @conformetry/configuration 可以商用吗？

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

### @conformetry/configuration 的下载量有多少？

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

### @conformetry/configuration 还在维护吗？

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

