Bun v1.2.19发布,node_modules隔离,sql比node快6倍

发布于:2025-07-22 ⋅ 阅读:(18) ⋅ 点赞:(0)

大家好,我是农村程序员,独立开发者,行业观察员,前端之虎陈随易。我会在这里分享关于 独立开发编程技术思考感悟 等内容,欢迎关注。

技术群与交朋友请在个人网站联系我,网站 1️⃣:https://chensuiyi.me,网站 2️⃣:https://me.yicode.tech

如果你觉得本文有用,一键三连 (点赞评论转发),就是对我最大的支持~


node_modules 隔离

这是本次更新最令人兴奋的功能了,请看上图,左侧是 v1.2.18 的 node_modules 结构,所有依赖都平铺到一起。右侧是 v1.2.19 的 node_modules 结构,在使用 workspaces 管理的 monorepo 多项目仓库可以拥有自己的 node_modules 了。

也就是说,如果你的项目使用了一个依赖的不同版本,那么现在可以多版本共存了。也正是因为这个功能,不少人表示,是时候进入到 Bun 的世界了。

但,这个功能不是默认启用的,使用命令 bun install --linker=isolated 来手动指定安装方式为隔离模式。更好的方法则是在项目根目录创建 bunfig.toml 文件,配置如下:

[install]
linker = "isolated"

这样直接运行 bun install,无需指定 --linker=isolated 参数。

Bun.sql 速度现在提高了 5 倍

import {
   
    SQL } from 'bun:sql';

const db = new SQL('postgres://user:pass@host:port/db');

// Bun 自动将这些查询流水线化,
// 将它们发送到服务器,而无需等待每个查询的单独响应。
const queries = [];
for (let i = 0; i < 100; i++) {
   
   
    // .execute() 用于即发即弃查询
    queries.push(db`SELECT ${
     
     i}`.execute());
}

// 等待所有结果
const results = await Promise.all(queries);
console.log(results.length); // 100

await db.end();

Bun 的内置 PostgreSQL 客户端 Bun.sql 现在可以自动对查询进行流水线化,从而显著提升性能。

流水线化允许将多个查询发送到服务器,而无需等待前一个查询的响应,从而减少网络延迟的影响。

这在并行执行许多小型独立查询时尤其有效 (例如,一个 API 服务器同时处理多个并发请求)。

此更改默认启用,无需更改代码,在基准测试中,对于高并发工作负载,Bun.sql 现在比在 Bun 中运行的 postgres 包快约 3.4倍,比在 Node.js 中运行的 postgres 快约 6倍

手动选择依赖更新

更新依赖的时候,执行 bun update --interactive,简写 bun update -i,即可列出所有待更新依赖,可以手动选择更新哪些依赖。

这个功能跟 npm-check-updates 和 antfu 的 taze 类似,不过能被 bun 内置,还是更方便的。

新增 bun pm pkg 命令

# 获取单个属性
bun pm pkg get name
# 获取多个属性
bun pm pkg get name version
# 设置单个属性
bun pm pkg set name="my-package"
# 设置多个属性
bun pm pkg set scripts.test="jest" version=2.0.0
# 删除单个属性
bun pm pkg delete description
# 删除嵌套属性
bun pm pkg delete scripts.test contributors[0]

虽然好像大部分时候用不上,但也非常实用,有时候需要快速修改属性,就不需要创建单独的脚本文件,或者引入第三方包了。

在 workspaces 中更快的安装速度

修复了导致安装过程中多次重新评估工作区包的错误,这使得使用 Bun 工作区的 Monorepos 的安装速度更快、更可靠。

{
   
   
    "dependencies": {
   
   
        "react": "18.2.0"
    },
    "devDependencies": {
   
   
        "react": "18.3.0"
    },
    "peerDependencies": {
   
   
        "react": "18.2.1"
    }
}

当多个依赖组都有相同的依赖时,目前已调整解析顺序为 devDependencies > optionalDependencies > dependencies > peerDependencies

bun pm pack 增加 --quiet 参数

bun pm pack 命令现在支持 --quiet 参数,使用 --quiet 标志后,它会抑制所有详细输出,仅将生成的 tarball 文件名打印到 stdout。

这对于需要捕获文件名的脚本和自动化工作流程尤其有用。

$ bun pm pack
bun pack v1.2.18

packed 131B package.json
packed 40B index.js

my-package-1.0.0.tgz

Total files: 2
Shasum: f2451d6eb1e818f500a791d9aace80b394258a90
Unpacked size: 171B
Packed size: 249B

👆 这是不加 --quiet 参数的输出。

$ bun pm pack --quiet
> my-package-1.0.0.tgz

👆 这是加上 --quiet 参数的输出。

TARBALL=$(bun pm pack --quiet)
echo "Created: $TARBALL"
> Created: my-package-1.0.0.tgz

👆 具体应用场景和效果如上。

读取 .npmrc 中的 link-workspace-packagessave-exact

bun installbun add 现在会读取并应用项目 .npmrc 文件中的 link-workspace-packagessave-exact 设置,这允许更精细地控制依赖项管理,与其他包管理器保持一致。

# ./.npmrc
save-exact=true

例如,要始终保存精确版本而不是使用 ^ 前缀,可以设置 save-exact=true

{
   
   
    "dependencies": {
   
   
        "is-odd"

网站公告

今日签到

点亮在社区的每一天
去签到