本文档涵盖了 Bun 的命令行界面 (CLI) 架构,包括命令解析、分发机制、环境设置以及与 JavaScript 运行时的集成。有关特定运行时执行的信息,请参阅 核心 JavaScript 运行时。有关包管理器等具体 CLI 命令的详细信息,请参阅 包管理器。
Bun 的 CLI 架构围绕一个模块化的命令分发系统构建,该系统处理参数解析、环境配置和运行时集成。该架构支持简单的脚本执行和复杂的包管理操作,同时在不同命令类型之间保持一致的行为。
来源:src/cli.zig45-68 src/cli.zig50-64
CLI 使用一个中心化的分发系统,该系统围绕 Command 枚举和相关的解析基础架构构建。clap 库处理低级参数解析,而更高级别的命令路由则通过 Command.Tag 系统进行管理。
Arguments 结构通过编译时常量(如 auto_params、run_params、test_params 等)为每种命令类型提供参数定义。每条命令通过组合基本参数和特定于命令的选项来定义其自己的参数集。
来源:src/cli.zig133-442 src/cli.zig255-261 src/cli.zig324-325
| 参数集 | 命令 | 目的 |
|---|---|---|
base_params_ | 所有 | 通用标志,如 --help、--config、--cwd |
runtime_params_ | 运行、测试、自动 | 运行时选项,如 --watch、--hot、--preload |
transpiler_params_ | 运行、测试、构建 | 转译设置,如 --jsx-runtime、--loader |
test_only_params | 测试 | 仅测试选项,如 --timeout、--coverage |
build_only_params | 构建 | 仅构建选项,如 --outdir、--minify |
来源:src/cli.zig176-241 src/cli.zig309-324
CLI 通过环境变量加载、配置文件解析和工作目录管理来建立运行时上下文。这发生在命令执行之前,以确保所有命令的行为一致。
配置系统按特定优先级加载来自多个源的设置
~/.bunfig.toml 或 $XDG_CONFIG_HOME/.bunfig.toml./bunfig.tomlDotEnv.Loader 应用来源:src/cli.zig326-441 src/cli.zig371-388 src/env_loader.zig22-44
每条命令都实现为 src/cli/ 目录下的一个独立模块,遵循一致的接口模式。命令负责自己的参数解析、环境设置和执行逻辑。
RunCommand 负责脚本执行和 package.json 脚本运行。它管理 Shell 检测、环境变量设置和进程创建。
RunCommand 通过 replacePackageManagerRun() 实现复杂的包管理器兼容性,该函数会自动将 yarn run、npm run 和 pnpm run 命令转换为使用 Bun 的运行时。
来源:src/cli/run_command.zig42-393 src/cli/run_command.zig121-239 src/cli/run_command.zig243-393
TestCommand 集成了 Bun 的 Jest 兼容测试运行器,并包含报告功能。
来源:src/cli/test_command.zig1-37 src/cli/test_command.zig109-459 src/cli/test_command.zig461-487
BunxCommand 提供类似 npm 的包执行功能,支持自动安装和缓存。
来源:src/cli/bunx_command.zig19-102 src/cli/bunx_command.zig275-292 src/cli/bunx_command.zig299-451
执行 JavaScript 代码的命令通过 bun_js.zig 模块与 Bun 的运行时集成。这提供了 CLI 命令和 JavaScript 执行环境之间的一致接口。
Run 结构充当 CLI 命令和运行时执行之间的桥梁,负责
来源:src/bun_js.zig26-33 src/bun_js.zig163-275 src/bun_js.zig282-486
CLI架构包括复杂的进程管理,用于处理子进程、环境变量和跨平台兼容性。
| 组件 | 目的 | 关键函数 |
|---|---|---|
DotEnv.Loader | 环境变量管理 | loadProcess()、get()、copyForDefine() |
ProcessExitHandler | 进程生命周期管理 | call()、init() |
LifecycleScriptSubprocess | 包脚本执行 | spawnNextScript()、onProcessExit() |
来源:src/env_loader.zig22-89 src/bun.js/api/bun/process.zig86-141 src/install/lifecycle_script_runner.zig14-44