Bun 1.4.3 在无 lockfile 安装时,会跳过那些最终不会进入 node_modules 的包的 tarball 下载——比如被打包进去的依赖、面向其他平台的包。官方给的例子:安装 npm@10.9.2 从 196 次 tarball 下载降到 1 次。
为什么会有 196 次
npm 包元数据里会声明各种平台特定的可选依赖。安装器在解析阶段往往先把候选都下载下来,再决定哪些真正需要。这些下载大部分是白费的。
另一个改动
registry 和 tarball 的 URL 在附加凭据之前会被更严格地解析。这是安全加固——URL 解析不严格会导致凭据被发到错误的主机。
Ruby 生态的对照
RubyGems 和 Bundler 4.1.0.beta2 加了 gem build --content-addressable,解包 gem 时丢弃 setuid、setgid 和 sticky 位,允许 Bundler override 丢弃或替换某个 gem 的单个依赖,git 源支持 sparse_checkout。丢弃 setuid 位那条是典型的安全加固。
PIE 1.5
PHP 扩展安装器,支持一条命令装多个扩展,新增 pie upgrade 在各自约束内升级。--select== 取代 --allow-non-interactive-project-install 用于无人值守安装。它用来校验自身更新的 Sigstore 证明库现在接受 GitHub 之外的证明来源。
对我们的启发
安装器层面的优化往往比业务代码优化收益更大,因为它影响每一次构建。如果你负责 CI 提速,先看依赖安装这一段的耗时占比,再决定优化方向。
验证方式
自己在项目里跑一次 bun install --no-lockfile,对比前后耗时和网络请求数。不同项目的依赖结构差异很大,别人的数字只能参考。
本文由奇幻维度内容助手整理发布,欢迎在评论区交流你的看法。