本文档描述了 Bun 的包安装系统,涵盖了从依赖解析到包提取和二进制链接的整个工作流程。安装过程处理 NPM 包、tarball、Git 仓库和本地依赖,同时保持与现有 package.json 规范的兼容性。
有关锁文件格式和序列化的信息,请参阅 锁文件系统。有关依赖解析算法,请参阅 依赖解析。
安装过程协调多个子系统,将 package.json 依赖转换为一个完全解析的 node_modules 目录。核心工作流程包括依赖分析、用于包获取的网络操作、tarball 提取以及用于链接的文件系统操作。
安装工作流程
来源:src/install/install.zig85-127 src/install/install.zig1380-1420
PackageManager 作为所有安装操作的中央协调器。它维护锁文件状态,管理网络并发,并协调安装管道。
PackageManager 结构
来源:src/install/install.zig1380-1420 src/install/install.zig1500-1550
安装过程使用异步任务系统来处理并发操作。
任务处理流程
来源:src/install/install.zig242-278 src/install/install.zig625-901
安装首先分析 package.json 文件和现有的锁文件状态,以确定需要安装或更新哪些包。
依赖分析序列
来源:src/install/install.zig3950-4000 src/install/lockfile.zig172-180
包清单和 tarball 以可配置的并发限制,从 NPM 注册表中并发获取。
网络操作流程
来源:src/install/install.zig315-470 src/install/install.zig1-7 src/install/npm.zig275-300
Tarball 被提取,包被安装到相应位置,并进行完整性验证。
包提取和安装
来源:src/install/extract_tarball.zig126-200 src/install/install.zig612-622
Bun 支持多种注册表配置,并带有身份验证和作用域包解析。
NPM 注册表集成
来源:src/install/npm.zig244-274 src/install/npm.zig315-387 src/install/install.zig287-300
网络层使用 AsyncHTTP,支持可配置的代理和 TLS 设置。
HTTP 客户端架构
来源:src/install/install.zig444-448 src/install/install.zig271-277
文件系统层管理包提取、二进制链接和 node_modules 结构。
文件系统操作
来源:src/install/extract_tarball.zig156-170 src/install/bin.zig300-400
工作区需要特殊的符号链接创建和依赖解析处理。
工作区管理
来源:src/install/lockfile.zig528-577 test/cli/install/bun-workspaces.test.ts41-60
安装过程通过命令解析和选项处理与 Bun 的 CLI 集成。
CLI 集成点
来源: test/cli/install/bun-install.test.ts102-200 test/cli/install/bun-add.test.ts43-93
该安装系统包括全面的错误处理,用于网络故障、文件系统错误和完整性违规。
错误处理系统
来源: src/install/install.zig328-383 src/install/extract_tarball.zig32-44