菜单

跨平台支持

相关源文件

本页面介绍了 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

来源: package.json94-97

特定平台支持

Node.js 支持 (CommonJS)

对于使用 CommonJS (require()) 的 Node.js 环境,Zod 在 lib 目录中提供 .js 文件。package.json 的 main 字段指向 ./lib/index.js,用于传统的 Node.js 导入。

来源: package.json9 package.json51-54

ESM 支持

对于使用 ESM (import) 的现代 JavaScript 环境,Zod 提供 .mjs 文件。package.json 的 module 字段指向 ./lib/index.mjs,而 exports 字段提供 ESM 导入的映射。

来源: package.json10 package.json50-57

Deno 支持

对于 Deno 环境,Zod 维护一个单独的仓库 (zod-deno),其中包含 Deno 兼容的 TypeScript 文件。这些文件从主代码库自动生成,并在发布过程中推送到 Deno 仓库。

来源: deno/lib/index.ts1-5 deno/lib/external.ts1-7 .github/workflows/release.yml65-73

Deno 版本的主要区别

  • 文件使用 .ts 扩展名进行导入,而非 .js
  • 仅使用 ESM 语法
  • 类型定义直接包含在源文件中

发布和部署工作流

Zod 使用 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

跨平台使用示例

Node.js (CommonJS)

ESM (浏览器或支持 ESM 的 Node.js)

Deno

金丝雀版本

除了稳定版本,Zod 还提供金丝雀版本,用于在新功能达到稳定版本之前进行测试。这些金丝雀构建会发布到 npm 并带有 canary 标签,并遵循不同的版本模式。

来源: .github/workflows/release-canary.yml1-50

结论

Zod 的跨平台支持使开发者能够在 Node.js、浏览器 (通过 ESM) 和 Deno 环境中使用相同的验证库。这通过以下方式实现:

  1. 平台无关的 TypeScript 源代码
  2. 为每个平台生成适当输出的构建系统
  3. 使用 mainmoduleexports 字段进行正确的包配置
  4. 跨平台的自动化测试以确保兼容性
  5. 针对每个平台的专用部署管道

这种方法使 Zod 能够维护单一代码库,同时为所有主流 JavaScript 环境提供最佳支持。