# @cdktf/hcl2cdk 中文文档

规范地址：https://npmcn.com/package/%40cdktf/hcl2cdk/

版本：0\.21\.0
npm 元数据更新时间：2025-06-04T16:46:22.843Z
中文译文更新时间：2026-11-09T06:34:28.119Z
软件包许可：MPL-2\.0

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

原始 npm 页面：https://www.npmjs.com/package/%40cdktf/hcl2cdk
原文对照：https://npmcn.com/package/%40cdktf/hcl2cdk/?lang=original
项目主页：https://github.com/hashicorp/terraform-cdk#readme
源码仓库：https://github.com/hashicorp/terraform-cdk

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

- 包体积（解压后）：909 kB，61 个文件
- 模块格式：CommonJS
- TypeScript 类型：包内自带
- 运行依赖：18 个
- 首次发布：2021-07-26T14:08:56.796Z
- 最新版本发布：2025-06-04T16:46:22.596Z
- 近 30 天下载量：587130（2026-10-10 至 2026-11-08，npm 官方下载统计）
- 已发布版本数：732（近 12 个月 0 个）

## 中文简介

将 HCL 转换为 CDK

## 安装

```sh
npm install @cdktf/hcl2cdk
```

也可以使用：`pnpm add @cdktf/hcl2cdk`、`yarn add @cdktf/hcl2cdk`、`bun add @cdktf/hcl2cdk`

## README

# @cdktf/hcl2cdk (英语)

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

## 使用量

```sh
yarn add @cdktf/hcl2cdk
```

### 将 HCL 字符串转换为构造

```ts
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",
});
```

### 转换工程

```ts
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` 并且由于登记处不知道该供应商而失败. 请看 [需要的提供者文件](https://www.terraform.io/docs/language/providers/requirements.html#requiring-providers) 以获取更多关于如何指定提供者的信息.

### 本地模块和文件

我们不为您移动模块或文件,如果您引用本地模块,您必须移动这些模块,以便相对路径正确. 如果要使用文件,请将文件包入 [`TerraformAsset`](https://npmcn.com/package/docs/working-with-cdk-for-terraform/terraform-assets.md) 在使用它们之前.

### 发展

我们有两种测试案例,一种在 `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 是什么？

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

