~/.bun/install/cache,或者是环境变量 BUN_INSTALL_CACHE_DIR 定义的路径。它们存储在名为 ${name}@${version} 的子目录中,因此可以缓存一个包的多个版本。
配置缓存行为
配置缓存行为
bunfig.toml
最小化重新下载
Bun 努力避免多次重新下载包。安装包时,如果缓存已包含 [package.json] 指定范围内的版本,Bun 将使用缓存的包而不是再次下载。安装详情
安装详情
如果语义化版本有预发布后缀(
1.0.0-beta.0)或构建后缀(1.0.0+20220101),它将被替换为此值的哈希,以减少与长文件路径相关的错误的可能性。当存在 [node_modules] 文件夹时,在安装之前,Bun 会检查 [node_modules] 是否包含所有具有适当版本的预期包。如果是,bun install 完成。Bun 使用自定义 JSON 解析器,一旦找到 "name" 和 "version" 就停止解析。如果包缺失或版本与 [package.json] 不兼容,Bun 会检查缓存中是否有兼容的模块。如果找到,它将被安装到 [node_modules] 中。否则,包将从注册表下载然后安装。快速复制
包下载到缓存后,Bun 仍需要将这些文件复制到 [node_modules]。Bun 使用可用的最快系统调用执行此任务。在 Linux 上,它使用硬链接;在 macOS 上,它使用clonefile。
节省磁盘空间
由于 Bun 在 Linux 和 Windows 上使用硬链接将模块”复制”到项目的 [node_modules] 目录,包的内容只存在于磁盘上的单个位置,大大减少了专用于 [node_modules] 的磁盘空间。 此好处也适用于 macOS,但有例外。它使用clonefile,这是写时复制,意味着它不会占用磁盘空间,但它会计入驱动器的限制。如果某些内容试图修补 [node_modules/*],此行为很有用,因此不可能影响其他安装。
安装策略
安装策略
此行为可通过 Bun 的运行时目前没有公开相当于
--backend 标志配置,Bun 的所有包管理命令都支持此标志。hardlink: Linux 和 Windows 上的默认选项。clonefilemacOS 上的默认选项。clonefile_each_dir: 类似于clonefile,只是它按目录分别克隆每个文件。仅在 macOS 上可用,且往往比clonefile性能较慢。copyfile: 当上述任何方法失败时使用的备选方案。这是最慢的选项。在 macOS 上使用fcopyfile();在 Linux 上使用copy_file_range()。symlink: 当前仅用于file:(以及最终的link:)依赖。为防止无限循环,它会跳过 [node_modules] 文件夹的符号链接。
--backend=symlink 安装,Node.js 不会解析依赖的 node_modules,除非每个依赖都有自己的 [node_modules] 文件夹或你向 node 传递 --preserve-symlinks。请参阅 Node.js 关于 --preserve-symlinks 的文档。terminal
--preserve-symlinks 的功能。