@cdktf/hcl2cdk

中文文档
0.21.0发布于 2025/06/05MPL-2.0TypeScriptCommonJS近 30 天下载 58.7万

将 HCL 转换为 CDK

中文使用文档
文档目录7 节
  1. 使用量
  2. 将 HCL 字符串转换为构造
  3. 转换工程
  4. 已知的限制
  5. 被猜测的提供者无法运行
  6. 本地模块和文件
  7. 发展

@cdktf/hcl2cdk (英语)

用途 @cdktf/hcl2cdk 将 HCL 配置转换为 CDK 构造.

使用量

yarn add @cdktf/hcl2cdk

将 HCL 字符串转换为构造

import { convert } from "@cdktf/hcl2cdk";

const hcl = `
  variable "name" {
    description = "Name to be used on all the resources as identifier"
    type        = string
    default     = ""
  }
`(async () => {
  const ts = await convert(hcl, { language: "typescript" });
  console.log(ts.imports); // just the necessary imports
  console.log(ts.code); // just the constructs
  console.log(ts.all); // code with imports
})();

// =>
import * as cdktf from "cdktf";

new cdktf.TerraformVariable(this, "imageId", {
  type: "string",
  default: "ami-abcde123",
  description: "What AMI to use to create an instance",
});

转换工程

import * as hcl2cdk from "@cdktf/hcl2cdk";
import {
  readSchema,
  ConstructsMakerProviderTarget,
  LANGUAGES,
  config,
} from "@cdktf/provider-generator";

(async () => {
  const hcl = hcl2cdk.getTerraformConfigFromDir("/path/to/terraform/project");
  const providerRequirements = await hcl2cdk.parseProviderRequirements(hcl);
  const targets = Object.entries(providerRequirements).map(([name, version]) =>
    ConstructsMakerProviderTarget.from(
      new config.TerraformProviderConstraint(`${name}@ ${version}`),
      LANGUAGES[0],
    ),
  );
  // Get all the provider schemas, making the conversion more precise
  const { providerSchema } = await readSchema(targets);

  const mainTs = await hcl2cdk.convert(hcl, {
    language: "typescript",
    providerSchema: providerSchema,
  });

  await hcl2cdk.convertProject(
    hcl,
    mainTs.code,
    require("../cdktf.json"),
    { language: "typescript", providerSchema }, // Currently we only support Typescript for project conversion
  );
})();

这将将您的 Terraform 项目转变为 Terraform 项目的 CDK, 除了 Terraform 内部的资源命名之外, 所部署的资源不应有差异 terraform plan 财务报告和审定财务报表 cdktf plan。 。 。 .

已知的限制

被猜测的提供者无法运行

如果您的《有害物质清单》中包含未在下文中提及的供应商 required_providers 我们推断这个名字,例如如果你使用 datadog_dashboard 我们推断提供方 datadog 这是正确的,但名称空间缺失, 因为DataDog 它会是 datadog/datadog相反,我们将尝试使用 hashicorp/datadog 并且由于登记处不知道该供应商而失败. 请看 需要的提供者文件 以获取更多关于如何指定提供者的信息.

本地模块和文件

我们不为您移动模块或文件,如果您引用本地模块,您必须移动这些模块,以便相对路径正确. 如果要使用文件,请将文件包入 TerraformAsset 在使用它们之前.

发展

我们有两种测试案例,一种在 lib 单位一级和单位内 test 通过转换然后合成产生的代码来测试整个软件包.

一般来说,两种测试类型都可以由 npx jest <pathToTestCase>。您可以添加 -u 以更新快照和 --watch 以监视模式运行测试.

在里面做测试 test 我们更快地默认禁用合成和多语言快照。 您可以通过设置嵌入变量来启用它们 CI=true显著改进业绩的另一种方式是确定 TF_PLUGIN_CACHE_DIR 到有效的目录,以缓存测试中使用的提供者二进制。 例如通过运行 TF_PLUGIN_CACHE_DIR=(mktemp -d) npx jest <pathToTestCase> --watch。 。 。 .

版本与发布记录

@cdktf/hcl2cdk 共发布 732 个版本,首次发布于 2021/07/26;过去 12 个月发布了 0 个版本。

版本发布日期距今
0.21.0latest2025/06/051.4 年前
0.21.0-pre.170next2025/05/221.5 年前
0.21.0-pre.1652025/04/171.6 年前
0.21.0-pre.1662025/04/171.6 年前
0.20.122025/04/171.6 年前
0.21.0-pre.1642025/04/171.6 年前

关于 @cdktf/hcl2cdk 的常见问题

@cdktf/hcl2cdk 是什么?

将 HCL 转换为 CDK

如何安装 @cdktf/hcl2cdk?

在项目目录运行 npm install @cdktf/hcl2cdk,或使用 pnpm add / yarn add / bun add。

@cdktf/hcl2cdk 支持 TypeScript 吗?

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

@cdktf/hcl2cdk 支持 ESM 还是 CommonJS?

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

@cdktf/hcl2cdk 可以商用吗?

@cdktf/hcl2cdk 使用 MPL-2.0 许可。弱 Copyleft:可以商用,也可以和闭源代码一起使用;但如果分发时修改了 MPL 授权的文件,这些文件的修改需以 MPL 开源。以上为概括,不构成法律意见,请以许可原文为准。

@cdktf/hcl2cdk 的下载量有多少?

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

@cdktf/hcl2cdk 还在维护吗?

最新版本 0.21.0 发布于 2025/06/05(1.4 年前);至今共发布 732 个版本,其中过去 12 个月发布了 0 个;首次发布于 2021/07/26。发布频率只是参考信号:功能稳定的工具可能很少需要更新,建议结合源码仓库的 issue 和提交记录判断。