@elg/tscodegen

中文文档
0.5.0发布于 2026/04/23MITTypeScriptCommonJS近 30 天下载 1.4万

TypeScript 字符串基于代码生成工具,其中包含散列文件和可手动编辑的部分

中文使用文档
文档目录10 节
  1. 关键特性
  2. 安装
  3. 使用量
  4. 样本
  5. 代码脚本
  6. 产出
  7. 生成非 TypeScript 文件
  8. 生成缩进敏感语言( Python, YAML, Makefile,...)
  9. 支持的文件类型 CommentSyntax
  10. 已知的限制

tscodegen 码

CircleCI codecov Maintainability

tscodegen 码 是一个最小的 类型脚本端口 脸书包 代码它提供流利的API 允许您从 : 代码,可选择可手动编辑的段落和篡改检测.

关键特性

  • 生成文件中可手动编辑的段落 。 这种行为差不多了 和Hack Codegen惊人的一样 部分生成 文件。 。 。 . 与大多数其他代码生成工具不同,tscodegen(和Hack Codegen)是 能够生成可编辑的文件, 允许您的代码源输出轻松 量身定制和扩展,不给猴子打草惊蛇或子分类。 这些编辑 当代码被重新生成时将保留.

  • 基于字符串的代码生成. 我们回避处理AST(例如: ts-morph 或 TypeScript 编译器 API),支持字符串操纵. 这样你就可以自然地写出生成的代码,不用知道 typeScript的AST的细节.

  • 密码锁篡改检测。 将散列添加到每个块的多克块中 生成文件, 以方便检测外部已更改的文件 生成的手动部分。 将来,这可以 以 ESLint规则 (百分数) 欢迎.

  • 没有模板文件 。 tscodegen 用途 模板 字节 和 TypeScript 方法调用,允许您使用循环和条件 无需学习另一种诱人的语言.

  • 自动格式化为 Pretier, 使用您的工程的 Pretier 配置 . 生成的代码很少如此可读.

  • 干净,流利,最小的API.

安装

npm install @elg/tscodegen prettier # NPM
yarn add @elg/tscodegen prettier # Yarn

使用量

  1. import { CodeFile } from '@elg/tscodegen';
  2. 证据 CodeFile。 。 。 .
  3. 打电话 build 以 CodeBuilder 举个例子.
  4. 将已建文件写入磁盘 saveToFile。 。 。 .

样本

代码脚本

new CodeFile("./file.ts")
  .build((builder) =>
    builder
      .addLine("import path from 'path';")
      .addLine("import fs from 'fs'")
      .addLine()
      .addManualSection("custom_imports", (builder) => builder)
      .addLine()
      .addBlock("class Steam extends Water", (builder) =>
        builder
          .addBlock("constructor()", (builder) =>
            builder.addLine("this.boil();"),
          )
          .addLine()
          .addBlock("boil()", (b) =>
            b.addManualSection("boil_body", (builder) =>
              builder.add("this.temp = 100;"),
            ),
          ),
      )
      .format(),
  )
  .lock()
  .saveToFile();

产出

/**
 * This file is generated with manually editable sections. Only make
 * modifications between BEGIN MANUAL SECTION and END MANUAL SECTION
 * designators.
 *
 * @generated-editable Codelock<<jF8gPj9IVq16NXBAtEzJj0rrD9HR7Q6V>>
 */

import path from "path";
import fs from "fs";

/* BEGIN MANUAL SECTION custom_imports */
/* END MANUAL SECTION */

class Steam extends Water {
  constructor() {
    this.boil();
  }

  boil() {
    /* BEGIN MANUAL SECTION boil_body */
    new Magician().magic(); // This line was retrieved from the original file.ts
    /* END MANUAL SECTION */
  }
}

生成非 TypeScript 文件

默认, CodeFile 散发JSDoc/C型的Doc块和手动部分 标记。 传出 a commentSyntax 选项 支持行注释(例如). .gitattributes 与 # 评论, shell 脚本, 或一个 .ts 您喜欢的文件 // 文档块 :

export type CommentSyntax =
  | { kind: "jsdoc" } // default — JSDoc/C-style
  | { kind: "line"; prefix: string }; // e.g. "# " or "// "

示例 .gitattributes 生成器 :

new CodeFile(".gitattributes", {
  commentSyntax: { kind: "line", prefix: "# " },
})
  .build((b) =>
    b
      .addManualSection("manual", (m) => m.addLine("# add custom rules here"))
      .addLine("path/to/generated.ts linguist-generated=true"),
  )
  .lock("\nTo update this file, run: npm run generate:gitattributes\n")
  .saveToFile();

样本输出 :

# This file is generated with manually editable sections. Only make
# modifications between BEGIN MANUAL SECTION and END MANUAL SECTION
# designators.
#
# To update this file, run: npm run generate:gitattributes
#
# @generated-editable Codelock<<...>>

# BEGIN MANUAL SECTION manual
# add custom rules here
# END MANUAL SECTION
path/to/generated.ts linguist-generated=true

其他一切都一样: verify() 探测到在 手动部分, lock() 添加散列,以及 saveToFile() 写入 结果。 手动分割键仍然必须是非空和白空的.

生成缩进敏感语言( Python, YAML, Makefile,...)

对于缩进为同步的语言,使用 CodeBuilder.indent(amount, fn) 打开每个发射线(包括手动部分)的嵌入范围 标记和正文)的前缀为 amount缩进范围 添加: indent(" ", b => b.indent(" ", bb => …)) 生成四个空格 缩入.

new CodeFile("compute.py", { commentSyntax: { kind: "line", prefix: "# " } })
  .build((b) =>
    b
      .addLine("def compute(x: int) -> int:")
      .indent("    ", (fn) =>
        fn
          .addLine("result = x + 1")
          .addManualSection("postprocess", (m) => m.addLine("return result")),
      ),
  )
  .lock()
  .saveToFile();

输出 :

# This file is generated with manually editable sections. Only make
# modifications between BEGIN MANUAL SECTION and END MANUAL SECTION
# designators.
#
# @generated-editable Codelock<<...>>

def compute(x: int) -> int:
    result = x + 1
    # BEGIN MANUAL SECTION postprocess
    return result
    # END MANUAL SECTION

手动分会 整洁地穿过再生过程: 被储存的身体是 语义 (栏-0内容),构建者重新应用环境缩进 离开的路上。 因此,一个人谁编辑 一节,并添加行 匹配缩进 :

    # BEGIN MANUAL SECTION postprocess
    if result > 100:
        raise ValueError(result)
    return result
    # END MANUAL SECTION

将在再生后看到其编辑内容保存的逐字记录,否 巢穴收缩的再转移 if编号 :raise 配对保持其4个空间 相对缩进).

indent() 接受任意字符串——通常是空格或 "\t" -所以也一样 覆盖 Makefile 食谱、 YAML 映射、 Terraform/ HCL 块、 INI 类 格式,或列位置关系的任何其他布局.

支持的文件类型 CommentSyntax

tscodegen将注释前缀视为不透明字符串,所以任何 语言,其注释适合支持的形状之一 那个盒子 下表列出共同目标的配置 文件类型.

文件类型CommentSyntax
类型脚本 / Java 脚本 / TSX / JSX{ kind: "jsdoc" } (默认)
去吧,鲁斯特,斯威夫特,克特林,爪哇{ kind: "jsdoc" }
C, C++ 数据{ kind: "jsdoc" }
CSS / SCSS / 低温{ kind: "jsdoc" }
普罗托布夫{ kind: "jsdoc" }
TS/JS(首选线条评论){ kind: "line", prefix: "// " }
鲁比活佛{ kind: "line", prefix: "# " }
贝壳 / 巴什 / zsh{ kind: "line", prefix: "# " }
YAML, TOML 语言{ kind: "line", prefix: "# " }
多克档案, .env{ kind: "line", prefix: "# " }
地平面 / HCL, 图QL{ kind: "line", prefix: "# " }
创建文件{ kind: "line", prefix: "# " } + 标签缩进
.gitattributes, (中文(简体) ), .gitignore{ kind: "line", prefix: "# " }
nginx.conf, 系统化单位{ kind: "line", prefix: "# " }
SQL 组合键{ kind: "line", prefix: "-- " }

Python/YAML/Terraform/Makefile/SQL快照输入 src/__snapshots__/integration.test.ts.snap 是一个活的目录 每一个都会产生什么样的输出.

已知的限制

  • JSON 没有评论语法,所以无法锁定。 如果你需要的话 生成 JSON 和其他文件, 要么释放一个同伴 元数据文件或使用 JSONC ({ kind: "line", prefix: "// " }) (中文(简体) ).
  • XML / HTML / SVG / 马克下架 / Vue SFCs / MDX 使用情况 <!-- ... --> 关闭注释, 无法在 CommentSyntax。 。 。 .
  • Shebangs必须是一号线. lock() 预花它的多克块,所以 锁定 shell 脚本 #!/usr/bin/env bash 最终低于 医生 对于作为可执行文件引用的脚本,请在 锁上门或通过译员调用后自杀 直接说.

版本与发布记录

@elg/tscodegen 共发布 6 个版本,首次发布于 2020/05/28;过去 12 个月发布了 3 个版本。

版本发布日期距今
0.5.0latest2026/04/236 个月前
0.4.02026/03/038 个月前
0.3.02026/03/038 个月前
0.2.02020/06/086 年前
0.1.12020/05/286 年前
0.1.02020/05/286 年前

关于 @elg/tscodegen 的常见问题

@elg/tscodegen 是什么?

TypeScript 字符串基于代码生成工具,其中包含散列文件和可手动编辑的部分

如何安装 @elg/tscodegen?

在项目目录运行 npm install @elg/tscodegen,或使用 pnpm add / yarn add / bun add。它还需要宿主项目提供 peer 依赖:prettier(3.x)。npm 7 及以上与 pnpm 8 及以上默认会自动安装必需的 peer 依赖,Yarn 需要手动安装。

@elg/tscodegen 支持 TypeScript 吗?

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

@elg/tscodegen 支持 ESM 还是 CommonJS?

以 CommonJS 形式发布,可以直接 require();在 ES Module 项目中也可以用 import 引入(Node.js 会把 module.exports 作为默认导出)。

@elg/tscodegen 需要什么版本的 Node.js?

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

@elg/tscodegen 可以商用吗?

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

@elg/tscodegen 的下载量有多少?

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

@elg/tscodegen 还在维护吗?

最新版本 0.5.0 发布于 2026/04/23(6 个月前);至今共发布 6 个版本,其中过去 12 个月发布了 3 个;首次发布于 2020/05/28。发布频率只是参考信号:功能稳定的工具可能很少需要更新,建议结合源码仓库的 issue 和提交记录判断。