Lockfile 系统管理依赖解析状态,并确保跨不同环境的可复现安装。它通过二进制和文本 lockfile 格式持久存储已解析的包版本、依赖项树和元数据。
有关使用 lockfile 的包安装过程的信息,请参阅 安装过程。有关依赖解析算法,请参阅 依赖解析。
Bun 支持两种 lockfile 格式,并具备自动格式检测和迁移能力。
bun.lockb)默认格式,使用高效的二进制序列化实现更快的解析速度和更小的文件大小。二进制格式使用 Lockfile.Serializer 进行加载和保存操作。
bun.lock)一种基于 JSON 的人类可读格式,用于版本控制和调试。文本 lockfile 使用 TextLockfile.parseIntoBinaryLockfile() 进行解析,并转换为内部二进制表示。
来源: src/install/lockfile.zig172-325 src/install/lockfile.zig328-356
Lockfile 系统围绕 Lockfile 结构体,该结构体包含所有依赖项和包信息。
来源: src/install/lockfile.zig1-27 src/install/install.zig214-217
Lockfile 使用复杂的字符串存储系统来最大化内存使用并支持高效的序列化。
StringPool:管理字符串的去重和引用。string_bytes:原始字符串数据缓冲区。ExternalString:通过偏移量和长度引用字符串缓冲区。String.Builder:在 lockfile 构建过程中构建字符串。来源: src/install/lockfile.zig14 src/install/install.zig135-137
Lockfile 加载过程遵循基于优先级的机制,并带有回退策略。
来源: src/install/lockfile.zig182-325 src/install/migration.zig32-84
Lockfile 系统实现了全面的完整性检查和版本管理。
meta_hash 字段包含一个 32 字节的哈希,代表 `package.json` 依赖项和配置的当前状态。这有助于检测需要 lockfile 更新的更改。
format 字段使用 FormatVersion 来跟踪 lockfile 格式的演变并确保兼容性。
来源: src/install/lockfile.zig2-6 src/install/lockfile.zig775-799
Bun 提供从其他包管理器 lockfile 的自动迁移。
迁移系统可以将 `package-lock.json`(版本 2 和 3)转换为 Bun 的格式。
来源: src/install/migration.zig32-84 src/install/migration.zig113-125
Lockfile 系统与包管理器紧密集成,用于依赖解析和安装。
Lockfile 系统通过专门的数据结构支持 workspaces。
workspace_paths:将 workspace 名称映射到文件系统路径。workspace_versions:将 workspace 名称映射到版本信息。Resolution.workspace 条目进行解析。来源: src/install/lockfile.zig19-20 src/install/lockfile.zig654-713
系统根据配置和现有 lockfile 自动选择合适的保存格式。
来源: src/install/lockfile.zig131-167 src/install/install.zig54-55