本页面介绍了 Zod 如何在不同 JavaScript 环境中提供兼容性,特别是 Node.js (CommonJS)、ESM (ECMAScript 模块) 和 Deno。有关核心架构的信息,请参阅核心架构。
Zod 旨在通过单一代码库在所有主流 JavaScript 运行时中无缝运行。这种跨平台支持通过精心设计的构建系统实现,该系统生成针对特定环境的发行文件,同时在所有平台上保持相同的验证和类型推断能力。
来源: package.json8-21 deno/lib/index.ts1-5
Zod 的构建系统将 TypeScript 源代码转换为多种输出格式,以支持不同的 JavaScript 环境。
来源: package.json86-97 .github/workflows/release.yml39-45
Zod 代码库用 TypeScript 编写,并采用促进跨平台兼容性的结构。源文件是平台无关的,不包含任何特定于环境的代码。这使得构建系统能够为每个目标平台生成适当的发行版。
来源: src/external.ts1-7 package.json63-66
Zod 使用一系列构建脚本生成不同的输出格式
| 脚本 | 目的 | 输出 |
|---|---|---|
build:cjs | 构建 CommonJS 模块 | lib/*.js |
build:esm | 构建 ES 模块 | lib/*.mjs |
build:deno | 构建 Deno 兼容模块 | deno/lib/*.ts |
build:types | 生成 TypeScript 声明 | lib/*.d.ts |
对于使用 CommonJS (require()) 的 Node.js 环境,Zod 在 lib 目录中提供 .js 文件。package.json 的 main 字段指向 ./lib/index.js,用于传统的 Node.js 导入。
来源: package.json9 package.json51-54
对于使用 ESM (import) 的现代 JavaScript 环境,Zod 提供 .mjs 文件。package.json 的 module 字段指向 ./lib/index.mjs,而 exports 字段提供 ESM 导入的映射。
来源: package.json10 package.json50-57
对于 Deno 环境,Zod 维护一个单独的仓库 (zod-deno),其中包含 Deno 兼容的 TypeScript 文件。这些文件从主代码库自动生成,并在发布过程中推送到 Deno 仓库。
来源: deno/lib/index.ts1-5 deno/lib/external.ts1-7 .github/workflows/release.yml65-73
Deno 版本的主要区别
.ts 扩展名进行导入,而非 .jsZod 使用 GitHub Actions 工作流来自动化跨平台的测试和部署。
来源: .github/workflows/test.yml11-71 .github/workflows/release.yml12-124
Zod 采用多环境测试策略以确保跨平台的兼容性
| 测试任务 | 目的 | 环境 |
|---|---|---|
test-node | 在 Node.js 环境中测试 | 支持多个 TypeScript 版本的 Node.js |
test-deno | 在 Deno 环境中测试 | Deno v1.x |
lint | 确保代码质量和格式 | Node.js |
来源: .github/workflows/test.yml12-71
除了稳定版本,Zod 还提供金丝雀版本,用于在新功能达到稳定版本之前进行测试。这些金丝雀构建会发布到 npm 并带有 canary 标签,并遵循不同的版本模式。
来源: .github/workflows/release-canary.yml1-50
Zod 的跨平台支持使开发者能够在 Node.js、浏览器 (通过 ESM) 和 Deno 环境中使用相同的验证库。这通过以下方式实现:
main、module 和 exports 字段进行正确的包配置这种方法使 Zod 能够维护单一代码库,同时为所有主流 JavaScript 环境提供最佳支持。