@conformetry/configuration

中文文档
0.0.78发布于 2026/11/10MITTypeScriptES Module构建来源已验证近 30 天下载 1.2万

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

中文使用文档
文档目录13 节
  1. 配置文件
  2. 发电机田
  3. 被拒绝的
  4. 实例
  5. 目录 globs 相对于文件 globs
  6. 设置模板的地方
  7. 阈值
  8. 投入
  9. 匹配
  10. 出口
  11. 测试
  12. 许可证
  13. * 调和

QQ 调和配置

npm

配置参考 调和。 。 。 .

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

npm install --save-dev @conformetry/configuration

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

配置文件

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

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

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

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当主机列出或提示生成器时显示
hookspreGenerate 财务报告和审定财务报表 postGenerate 函数环绕渲染;见 @conformetry/generation

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

被拒绝的

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

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

实例

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

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

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

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

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

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

目录 globs 相对于文件 globs

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

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

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

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

设置模板的地方

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

阈值

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

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

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

{
  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 读取——足够知道一个输入的名称,是否必须是 供货,以及劝说的时候要说什么.

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

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 flagNx插件通过自己的选项名称; 既不保守秘密,也不传达自己的信息.

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

测试

nx run conformetry-configuration:vitest

许可证

麻省理工学院——见 自由主义。 。 。 .

* 调和

这个项目源于 巢-服务-项目 符合模板.

版本与发布记录

@conformetry/configuration 共发布 75 个版本,首次发布于 2026/10/05;过去 12 个月发布了 75 个版本。最新版本附带 npm provenance 构建来源证明,可追溯到公开的 CI 构建记录。

版本发布日期距今
0.0.78latest2026/11/10今天
0.0.772026/11/10今天
0.0.762026/11/091 天前
0.0.752026/11/091 天前
0.0.742026/11/091 天前
0.0.732026/11/082 天前

关于 @conformetry/configuration 的常见问题

@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 和提交记录判断。