本文档涵盖了 Bun 的构建系统架构、依赖管理、跨平台编译以及持续集成基础设施。有关 JavaScript 处理管道的信息,请参阅 JavaScript 处理引擎。有关运行时架构的详细信息,请参阅 核心 JavaScript 运行时。
Bun 的构建系统协调使用不同语言(Zig、C++、JavaScript/TypeScript)编写的多个组件的编译,形成一个统一的可执行文件。该系统管理复杂的依赖项,包括 WebKit/JavaScriptCore,支持 Linux、macOS 和 Windows 的跨平台构建,并与 CI/CD 管道集成以进行自动化测试和发布。
构建系统使用 CMake 作为主要协调器,负责编排 Zig 编译、C++ 链接、JavaScript 打包和依赖项管理。
Sources: CMakeLists.txt1-58 package.json25-82 build.zig154-437
CMake 作为构建系统协调器,负责跨平台管理编译器设置、依赖项解析和构建目标定义。
CMake 系统通过 BunBuildOptions 结构和构建模式定义了多个构建配置
| 构建模式 | CMake 类型 | Zig 优化 | 用例 |
|---|---|---|---|
| 调试 | 调试 | 调试 | 开发、调试 |
| 发布 | 发布 | ReleaseFast | 生产构建 |
| RelWithDebInfo | RelWithDebInfo | ReleaseFast | 带调试信息的产品版本 |
| MinSizeRel | MinSizeRel | ReleaseSmall | 尺寸优化构建 |
Sources: CMakeLists.txt1-58 build.zig39-110 package.json31-42
Zig 构建系统(build.zig)负责 Bun 核心运行时的编译,并提供跨平台目标管理。
构建系统通过 TargetDescription 结构支持多种架构和操作系统
| 平台 | 架构 | ABI | 特殊处理 |
|---|---|---|---|
| Linux | x86_64, aarch64 | GNU, musl | glibc 版本限制 |
| macOS | x86_64, aarch64 | 不适用 | Apple M1 基线 |
| Windows | x86_64 | GNU | Windows 10 RS5 最低要求 |
Sources: build.zig112-152 build.zig439-453 src/env.zig65-140
Bun 管理多个外部依赖项,每个依赖项都有特定的构建需求和集成点。
依赖项在 `src/generated_versions_list.zig` 文件中通过特定的提交哈希进行跟踪。
boringssl: 29a2cd359458c9384694b75456026e4b57e3e567webkit: 13bb88da0b791154dca60910f301dcd70c321f72mimalloc: 4c283af60cdae205df5a872530c77e2a6a307d43zlib: 886098f3f339617b4243b286f5ed364b9989e245Sources: src/generated_versions_list.zig1-16 Makefile157-196 Makefile615-631
构建系统处理特定于平台的编译需求和目标配置。
构建系统包含特定的 CPU 目标以获得最佳性能
cortex_a35 基线,用于云兼容性apple_m1 显式目标Sources: build.zig137-152 src/env.zig65-173 build.zig669-677
构建系统提供了多种针对不同用例优化的构建配置。
| 配置 | 脚本命令 | CMake 类型 | Zig 优化 | 特性 |
|---|---|---|---|---|
build:debug | bun run build:debug | 调试 | 调试 | 完整调试,速度较慢 |
build:release | bun run build:release | 发布 | ReleaseFast | 优化,无调试信息 |
build:assert | bun run build:assert | RelWithDebInfo | ReleaseFast | 断言 + 日志 |
build:asan | bun run build:asan | 发布 | ReleaseFast | AddressSanitizer |
build:safe | bun run build:safe | 发布 | ReleaseSafe | 安全优化 |
build:smol | bun run build:smol | MinSizeRel | ReleaseSmall | 尺寸优化 |
Sources: package.json31-42 build.zig75-77 build.zig566-610
持续集成系统使用 Buildkite 对多个平台进行自动化构建、测试和发布。
发布管道协调版本管理、资产生成和分发
来源: package.json48 CMakeLists.txt39-41 build.zig221-265
该构建系统支持高效的开发工作流程,具有快速迭代和全面的工具。
该系统包含多项优化,可加快开发构建速度