@d2lang/d2

中文文档
0.1.34发布于 2026/09/08MPL-2.0TypeScriptESM + CJS零依赖构建来源已验证近 30 天下载 7.4万

D2.js是一款环绕WASM构建的D2,即现代文字到图表语言的包装.

中文使用文档
文档目录22 节
  1. 特征
  2. 安装
  3. 夜来
  4. 使用量
  5. 基本用途
  6. 进口
  7. API 参考
  8. new D2()
  9. compile(input: string | CompileRequest, options?: CompileOp…
  10. render(diagram: Diagram, options?: RenderOptions): Promise<…
  11. dispose(): Promise<void>
  12. CompileOptions
  13. RenderOptions
  14. CompileRequest
  15. CompileResponse
  16. 发展
  17. 从源头建楼
  18. 运行 Dev 服务器
  19. 测试
  20. 出版
  21. 捐款
  22. 许可证

D2.js 级

npm version License: MPL-2.0

D2.js是一款围绕D2的JavaScript包装机,即现代图脚本语言. 它可以通过WebAssembly在浏览器和节点环境中直接运行D2.

关于使用的例子,见 https://play.d2lang.com (英语),由d2.js提供动力,并且是 开源。 。 。 .

特征

  • 🌐 通用 - 在浏览器和节点环境中工作
  • 🚀 现代 - 采用无害环境管理模块,采用CJS倒置
  • 🔄 异态 - 到处都是相同的API
  • ⚡ 快点 - 由WebAssembly提供近乎本土性能的动力
  • 📦 轻巧 - 围绕核心D2引擎的最小包装器

安装

# npm
npm install @d2lang/d2

# yarn
yarn add @d2lang/d2

# pnpm
pnpm add @d2lang/d2

# bun
bun add @d2lang/d2

@terrastruct/d2 作为兼容软件包仍然可用,并收到相同的 在命名空间转换中释放。 新设施应使用 @d2lang/d2。 。 。 .

夜来

使用 @nightly 标记以获取由主分支上的每日 CI 构建的版本.

譬如说,

yarn add @d2lang/d2@nightly

使用量

D2.js使用网络工人调用一个WASM文件.

基本用途

// Same for Node or browser
import { D2 } from '@d2lang/d2';
// Or using a CDN
// import { D2 } from 'https://esm.sh/@d2lang/d2';

const d2 = new D2();

const result = await d2.compile('x -> y');
const svg = await d2.render(result.diagram, result.renderOptions);
await d2.dispose();

配置渲染选项(参见 编译选项 用于所有可用选项:

import { D2 } from '@d2lang/d2';

const d2 = new D2();

const result = await d2.compile('x -> y', {
    sketch: true,
});
const svg = await d2.render(result.diagram, result.renderOptions);

进口

为了支持 进口,可以将其内容的 D2 文件路径的映射传递给编译器.

import { D2 } from '@d2lang/d2';

const d2 = new D2();

const fs = {
  "project.d2": "a: @import",
  "import.d2": "x: {shape: circle}",
}

const result = await d2.compile({
    fs,
    inputPath: "project.d2",
    options: {
        sketch: true
    }
});
const svg = await d2.render(result.diagram, result.renderOptions);

API 参考

new D2()

创建新的 D2 实例.

compile(input: string | CompileRequest, options?: CompileOptions): Promise<CompileResponse>

将 D2 标记编为中间代表. 直接通过选项作为 第二个论点,例如 d2.compile('x -> y', { layout: 'tala' })对象 输入, input.options 具有可选性质,在 二者都指定相同的选项.

render(diagram: Diagram, options?: RenderOptions): Promise<string>

向 SVG 绘制一个编译图 .

dispose(): Promise<void>

终止该工人支持这一D2案例,并拒绝任何未决手术。 打电话 当实例不再需要时, 节点进程可以退出和浏览器工作 释放资源。 通话 dispose() 不止一次是安全的.

CompileOptions

全体 渲染选项 属性之外:

  • layout: 要使用的布局引擎( E)'dagre' | 'elk' | 'tala'[默认 : 'dagre'[ . ]
  • fontRegular 一个包含.ttf文件的字节数组用于正则字体. 如果没有提供,则使用Source Sans Pro Regular.
  • fontItalic 一个包含.ttf文件的字节数组用于斜体字体. 如果没有提供,则使用Sans Pro斜体.
  • fontBold 一个包含.ttf文件的字节数组,用于粗体字体. 如果没有提供,则使用Source Sans Pro Bold.
  • fontSemibold 包含.ttf文件的字节数组用于半粗体字体. 如果没有提供,则使用Source Sans Pro Semibold.

RenderOptions

  • sketch: 启用草图模式[默认:虚假]
  • themeID: 要使用的主题 ID [默认: 0]
  • darkThemeID: 客户端处于暗模式时要使用的主题ID
  • center: 将 SVG 在包含的视图框中居中 [默认: 假]
  • pad: 像素在已渲染的图上添加 [默认: 100]
  • scale: 缩放输出。 例如:0.5到将默认大小减半. 默认会让 SVG 适合筛选 。 设置为 1 个关闭的 SVG 配置到屏幕 .
  • forceAppendix: 为工具提示和链接添加附录[默认:虚假]
  • target: 拟制作的目标板。 如果目标结束为“',它将随其所有情景、步骤和层次而产生。 否则,只能提供目标板. 举个例子. target: 'layers.x.*' 与所有的孩子一起制造"x"层. 过" 使所有情景、步骤和层层化。 默认情况下,只有根板被渲染出. 多板输出目前仅用于动画 SVG 等 animateInterval 当瞄准多个板时,必须设定为大于0的值.
  • animateInterval:如果给出,多个板被打包成1 SVG,在间隔(以毫秒为单位)通过每个板来过渡.
  • salt: 添加盐值以确保输出使用独特的ID. 这在生成多个相同的图表以包含在同一 HTML doc 中时是有用的,这样重复的ID就不会导致无效的 HTML 。 盐值是一个字符串,将在输出时附加到ID上.
  • noXMLTag: Omit XML 标签 (<?xml ...?>) 从输出 SVG 文件。 在生成 SVG 直接嵌入 HTML 时有用 .

CompileRequest

  • fs: D2 文件路径的映射
  • inputPath: 条目D2文件的路径[默认:索引]
  • options: 可选 编译选项 传递到编译器

CompileResponse

  • diagram数字 : Diagram: 已编译的 D2 图
  • renderOptions数字 : RenderOptions: 组合选项与图中的配置合并
  • fs
  • graph

发展

D2.js 开发需要根中的 Go 版本 go.mod, Bun 版本 内 package.json,和节点.js 24与npm. 集成测试使用节点到 检查通用JS和无害环境管理应用程序中已安装npm软件包.

可选:对于最佳WASM文件大小,也安装二进制:

# macOS
brew install binaryen

# Ubuntu/Debian
sudo apt-get install binaryen

从源头建楼

git clone https://github.com/d2lang/d2.git
cd d2/d2js/js
./make.sh all

如果您更改了主 D2 源代码, 您应该重生 WASM 文件 :

./make.sh build

运行 Dev 服务器

您可以通过运行 dev 服务器浏览示例 :

./make.sh dev

访问 http://localhost:3000 以查看示例页.

测试

./make.sh test

出版

TODO稳定发布.

夜间建筑由CI通过运行实现自动化:

PUBLISH=1 ./make.sh build

捐款

欢迎捐款!

许可证

该项目根据"Mozilla公共许可证2.0版"获得许可.

版本与发布记录

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

版本发布日期距今
0.1.34latest2026/09/082 个月前
0.1.332026/08/083 个月前

关于 @d2lang/d2 的常见问题

@d2lang/d2 是什么?

D2.js是一款环绕WASM构建的D2,即现代文字到图表语言的包装.

如何安装 @d2lang/d2?

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

@d2lang/d2 支持 TypeScript 吗?

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

@d2lang/d2 支持 ESM 还是 CommonJS?

同时提供 ES Module 与 CommonJS 入口,import 和 require() 都可以使用,打包工具会自动选择合适的版本。

@d2lang/d2 可以商用吗?

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

@d2lang/d2 的下载量有多少?

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

@d2lang/d2 还在维护吗?

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