# @conformetry/generation 中文文档

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

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

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

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

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

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

## 中文简介

Confometry 的模板渲染和文件生成运行时间

## 安装

```sh
npm install @conformetry/generation
```

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

## README

# 相会生成

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

生成运行时间 [调和](https://npmcn.com/package/%40conformetry/conformetry-cli/README.md): 移动模板树,制作每个路径和每个文件,并写入 结果.

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

## 使用量

```ts
import { GenerationService } from "@conformetry/generation";

const result = await generationService.runGenerator({
  configurationDirectoryPath: "/workspace/configuration",
  definition: {
    name: "nestjs-service-module",
    templateDirectoryPath: "templates/nestjs-service-module",
  },
  inputs: { name: "billing" },
  instancePath: "packages/billing/src/modules",
});
// → { generatedFilePaths: [...], outputDirectoryPath: "..." }
```

生命周期是 `preGenerate` 执行 `postGenerate` 格式和格式 文件路径已排序 。 列表中钩子被附加的路径 之后的种类.

## 钩子

生成器可以声明两个运行在生成周围的函数. 这个 [钩子示例](https://npmcn.com/package/%40conformetry/conformetry-examples/examples/hooks/README.md) 运行两者.

| 钩子 | 运行 | `generatedFilePaths` 持有 |
| --- | --- | --- |
| `preGenerate` | 在写东西之前 | 无: 这是一个空阵列 |
| `postGenerate` | 模板发布后, 格式化前 | 每条路径, 排序 |

每个钩子都有一个 `GeneratorHookContext`,可以是同步或同步,并且是 等着呢 虎克是纯函数,所以一个配置无法声明它们 JSON, 无法执行函数; 任何 JavaScript 或 TypeScript 配置 能够。 从 `@conformetry/configuration`,用于再出口 `GeneratorHook`, (中文(简体) ), `GeneratorHookContext`,以及 `GeneratorHooks` 从 `@conformetry/core`页:1 配置不需要其他依赖性来键入其钩子.

```ts
import path from "node:path";

import type {
  ConformetryConfiguration,
  GeneratorHookContext,
} from "@conformetry/configuration";

const configuration: ConformetryConfiguration = [
  {
    hooks: {
      postGenerate: async (context: GeneratorHookContext): Promise<void> => {
        const receiptPath = path.join(
          context.configurationDirectoryPath,
          "receipts",
          `${context.substitutions["nameKebabCase"] ?? ""}.log`,
        );

        await context.filesystem.writeFile(receiptPath, "generated\n");
        context.generatedFilePaths.push(receiptPath);
      },
    },
    name: "receipt",
    templatePath: "templates/receipt",
  },
];

export default configuration;
```

### 二. 背景情况

| 外地 | 它所持有的 |
| --- | --- |
| `definition` | 生成器的运行时间定义 : `name`, (中文(简体) ), `templateDirectoryPath`, (中文(简体) ), `hooks` |
| `input` | 按输入名称给出的输入值 |
| `substitutions` | 模板用什么制作:名称变体,然后在它们上输入 |
| `outputDirectoryPath` | 奔跑的地方,恰好是主机通过的地方 |
| `generatedFilePaths` | 以上列举. 这是可变异的, 和什么物得到 |
| `filesystem` | 运行本身的适配器读取和写入 |
| `configurationDirectoryPath` | 宣布生成器的配置文件的绝对目录 |

路径因主机而异 :

-   **`outputDirectoryPath` 财务报告和审定财务报表 `generatedFilePaths`** 无论宿主是什么 通过了。 在表单的命令行下 `--directory` 被授予, 可能是相对的 在Nx下是绝对的.
-   **`filesystem` 只有绝对路径.** 从 `configurationDirectoryPath`从不从工作目录,所以钩子 动作相同, 但命令已经启动 .
-   **`configurationDirectoryPath` 在两个主机下是绝对的**,从 实际装入的文件 .
-   **`definition.templateDirectoryPath`** 是配置的 `templatePath` 因此,工作空间关系, 在命令行之下。 在Nx的下面,这是 解决了工作空间根,如此绝对.

没有 `replaceInFile` 帮手 编辑已提供文件的钩子读取 与 `filesystem.readFile`,修改文本,并写回.

### 从钩上写入

写入 `context.filesystem`没有 `node:fs`在命令行下 适配器写入磁盘 。 Nx下面写到发电机的虚拟树,所以 写入更改列表中, `--dry-run` 预览,没有 到达磁盘直到 Nx 冲出 。 写着 `node:fs` 跳过树: 它 立即登陆,甚至下 `--dry-run`中,当运行失败时就留下.

**只写在工作空间内.** Nx 适配器映射一个绝对路径 在工作空间内到树道。 它不能为外面的一条道路这样做,所以 书写被悄悄地重新植入工作空间,而读取 同一路径返回到磁盘。 构建来自 `configurationDirectoryPath`。 。 。 .

`makeDirectory` 在 Nx 下什么都不做; 写入文件创建其目录. 通过 Nx 适配器读取先看树, 所以钩子看到文件 之前在同一跑道上进行的.

### 格式列表

前题收到 `context.generatedFilePaths` 之后 `postGenerate`A级 file 所写的钩子不在列表中, 因此按下路径使其格式化 :

```ts
context.generatedFilePaths.push(receiptPath);
```

命令行主机不默认格式, 所以仅该列表 决定运行报告的内容. Nx 主机格式 树, 钩子, 包括它是否被推; 无论如何推它 两个主机都报告相同的文件.

### 当钩子扔出

运行停止在抛出,错误传播.

| 东道主 | `preGenerate` 掷出 | `postGenerate` 掷出 |
| --- | --- | --- |
| 命令行 | 什么也没有写 | 提供的文件 **留在磁盘上**; 格式不运行 |
| 无 | 那棵树没有动过 | 被渲染的文件坐在树上 `nx g` 为失败的运行冲出任何一无所有 |

命令行会用堆栈跟踪来打印一个钩子出错并退出非零. 上面没有说是哪个钩子扔的 所以把发电机和钩子的名字放进去 留言。 下 Nx 运行是两个钩子在磁盘上的原子, 但只用于写入 通过 `context.filesystem`。 。 。 .

## 渲染

`RenderingService` 是整个 整个工具链。 生成生成模板以创建文件; 验证 使 _不变_ 用于比较已有文件的模板 。 两者 必须以相同方式替换文件, 或验证会标记生成器的文件 因此,这两方面都未能重新执行.

内容和路径都与 [胡子](https://mustache.github.io/), HTML 逃出已禁用,因此替换 值不能损坏源代码. `buildNameSubstitutions` 来源 `nameCamelCase`, (中文(简体) ), `nameKebabCase`, (中文(简体) ), `namePascalCase`,以及 `nameSnakeCase` 从a 单名; 调用者将自己的输入合并到结果上, 所以明确 输入同一键总是获胜.

> **插图占位符 无人提供加价 `MissingSubstitutionError`。 。 。 .** 胡子会变成空的 字符串,而不是留下符号 可见,并且因为生成和 验证结果完全相同,其中一半的回路丢失了相同的值 同意没有问题。 在比较的两边都有一个洞 这不是一个可以比较的东西, 所以渲染器拒绝. 验证从不使空洞产生: 它读取了缺失的值 例如,如果无法报告,则报告.
> 
> 部分标记可豁免,故意: `{{#field}}` 财务报告和审定财务报表 `{{^field}}` 为: 条件,所以一个缺失的名称是模板要求块是怎样的 跳过或带走。 由空字符串提供的值也是答案—— 只有一个没有的钥匙是洞。 这些都是一个模板说 "可选":以一节相问,入于内.

路径曾经使用过 a `__field__` 他们自己的语法, 假设 套接字无法跨文件系统移植。 它们是——和单独的语法 无法从 Python dunder 中分辨占位符, 因此模板传送 `__init__.py` 取决于 `init` 永远无法替代.

## 适配器

文件系统和文件访问通过 `FileSystemAdapter` 财务报告和审定财务报表 `FormatterAdapter`,默认为磁盘和禁用。 就是这样 [`@conformetry/nx`](https://npmcn.com/package/%40conformetry/conformetry-nx/README.md) 重用此运行时间不变 nx 发生器 `Tree`刻意渲染 _没有_ 适配器,用于 上面的原因,我们...

## 出口

`GenerationService`, (中文(简体) ), `GenerationModule`,则 `DirectoryEntry`, (中文(简体) ), `FileSystemAdapter`, (中文(简体) ), `FormatterAdapter`,以及 `GeneratorDefinition` 类型。 这个 钩子类型重新导出配置 `@conformetry/configuration`。 。 。 .

## 测试

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

## 许可证

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

## \* 调和

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

## 常见问题

### @conformetry/generation 是什么？

Confometry 的模板渲染和文件生成运行时间

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

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

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

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

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

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

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

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

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

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

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

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

