当前位置: 首页 > backend >正文

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

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

技术群与交朋友请在个人网站联系我,网站 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); // 100await 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.18packed 131B package.json
packed 40B index.jsmy-package-1.0.0.tgzTotal 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"
http://www.xdnf.cn/news/15910.html

相关文章:

  • Kotlin 高阶函数初步学习
  • Laravel 系统版本查看及artisan管理员密码找回方法针对各个版本通用方法及原理-优雅草卓伊凡
  • 信息学奥赛一本通 1576:【例 2】选课 | 洛谷 P2014 [CTSC1997] 选课
  • 子网划分核心原理 (网络原理1)
  • [学习] Hilbert变换:从数学原理到物理意义的深度解析与仿真实验(完整实验代码)
  • 《通信原理》学习笔记——第五章
  • Spring 源码阅读(二) 核心概念解析 ApplicationContext、类型转化
  • 【PyTorch】图像二分类项目
  • 【JS逆向基础】数据库之mysql
  • 7.19-7.20 Java基础 | File类 I/O流学习笔记
  • pyhton基础【27】课后拓展
  • 【Linux】3. Shell语言
  • 深度相机的工作模式(以奥比中光深度相机为例)
  • SQL Server(2022)安装教程及使用_sqlserver下载安装图文
  • 《计算机网络》实验报告四 TCP协议分析
  • 0719代码调试记录
  • IsaacLab学习记录(四)
  • Milvus Dify 学习笔记
  • 题单【循环结构】
  • 基于单片机出租车计价器设计
  • 30天打牢数模基础-决策树讲解
  • 【C语言】字符串与字符函数详解(上)
  • C++ 并发 future, promise和async
  • 数位 dp
  • 「Java案例」利用方法打印乘法表
  • WPF学习笔记(28)Interaction.Triggers的意义与使用方式
  • dify创建OCR工作流
  • NX584NX559美光固态闪存NX561NW993
  • AI(学习笔记第六课) 使用langchain进行AI开发 load documents(csv和文件夹)
  • 开源社区贡献指南:如何通过Three.js插件开发提升企业技术影响力?