命令行界面 (CLI) 系统提供了 Bun 的各种工具和命令的主要用户界面。本文档涵盖了 CLI 架构、命令分发机制、参数解析系统以及单个命令的实现和执行方式。
有关特定运行时执行的信息,请参阅 核心 JavaScript 运行时。有关包管理器命令的详细信息,请参阅 包管理器。
CLI 系统围绕一个集中的命令分发架构构建,该架构负责参数解析、配置加载和命令执行。
来源: src/cli.zig50-64 src/cli.zig45-68
CLI 使用基于标签的分发系统,其中每个命令由一个 Command.Tag 枚举值表示,该值决定了参数的解析方式以及执行哪个实现。
来源: src/cli.zig107-132 src/cli.zig255-324
Bun 的 CLI 使用 clap 库进行参数解析,该库具有分层参数系统,可将基本参数与特定于命令的参数相结合。
| 类别 | 目的 | 关键参数 |
|---|---|---|
base_params_ | 所有命令通用 | --help, --config, --cwd, --env-file |
transpiler_params_ | 代码转换 | --define, --loader, --jsx-runtime, --tsconfig-override |
runtime_params_ | JavaScript 执行 | --watch, --hot, --preload, --inspect |
build_params_ | 打包和编译 | --outdir, --target, --minify, --sourcemap |
test_params_ | 测试执行 | --timeout, --coverage, --bail, --reporter |
来源: src/cli.zig176-324 src/cli.zig452-470
命令执行时,会经历一个标准化的流程,处理配置加载、参数验证和执行上下文设置。
来源: src/cli.zig452-470 src/cli.zig326-450
这些命令使用 Bun 的运行时执行 JavaScript/TypeScript 代码
RunCommand - 执行 JavaScript 文件、npm 脚本和 shell 命令TestCommand - 使用兼容 Jest 的 API 和报告器运行测试BunxCommand - 执行包而无需全局安装来源: src/cli/run_command.zig42-108 src/cli/test_command.zig28-36 src/cli/bunx_command.zig19-102
这些命令处理代码转换和打包
BuildCommand - 为生产环境打包和优化 JavaScript/TypeScriptTranspilerCommand - 在不打包的情况下处理代码转换这些命令管理依赖项和包
InstallCommand - 安装项目依赖项AddCommand - 添加新依赖项RemoveCommand - 删除依赖项UpdateCommand - 更新现有依赖项CLI 通过 bunfig.toml 文件与 Bun 的配置系统集成,这些文件可以自动加载或显式指定。
来源: src/cli.zig326-450 src/cli.zig371-441
每个命令执行都会创建一个 Command.Context,该上下文封装了执行环境,包括工作目录、配置、日志记录和特定于命令的选项。
上下文系统确保了所有命令之间的一致行为,同时允许通过 test_options、bundler_options 和 runtime_options 等选项进行特定于命令的自定义。