大家好,我是农村程序员,独立开发者,行业观察员,前端之虎陈随易。我会在这里分享关于 独立开发
、编程技术
、思考感悟
等内容,欢迎关注。
技术群与交朋友请在个人网站联系我,网站 1️⃣:https://chensuiyi.me,网站 2️⃣:https://me.yicode.tech。
如果你觉得本文有用,一键三连 (点赞
、评论
、转发
),就是对我最大的支持~
在没有 All in Bun
之前,我一直用的都是 pnpm
。
作为一个 间歇性偏执狂
,用 pnpm
的时候,我是坚决不用 npm
和 bun
的 (除非迫不得已
)。
什么叫 All in Bun
呢?就是我本地和服务器上,执行 npm -v
,pnpm -v
都是 未找到命令
,只有一个 Bun 用来运行,管理,编译等等一切相关操作。
有个问题困扰我已久,简直如鲠在喉,如芒在背,那就是 bun 不支持 bun update -r
命令,也就是不支持一键更新 Monorepo (单仓库多项目
) 单体架构的依赖。
如上图,如果我要更新 packages 中的所有子包的依赖,就得一个个进入该目录,一个个更新,非常繁琐,十分麻烦。
我已经在 bun 官方的帖子下提出支持 bun update -r
命令至少 3 次以上,望眼欲穿了好几个版本都没有进行支持。
今天,这个命令终于支持了。
迫不及待地测试了一下,整个人都舒服了,望穿秋水,水终于来了。
除此之外,CPU 的空闲利用率提高了。
当执行 bun install
的时候,如果 yarn.lock
是 v1
版本,则会自动升级到 bun.lock
。
AbortSignal.timeout
的速度提高了 40倍
。
const server = Bun.serve({
port: 0,
routes: {
'/latest.json': Response.json({ ...myBigObject })
}
});
const url = new URL('/latest.json', server.url);
const etag = await fetch(url).then((res) => res.headers.get('etag'));
const { status } = await fetch(url, {
headers: {
'If-None-Match': etag
}
});
console.log({ status, etag });
Bun.serve 现在会自动为在 static 选项中定义的静态路由生成 ETag 头部。
当客户端发送一个 If-None-Match
头部时,Bun 会比较 ETag,如果内容未更改,则发送一个 304 Not Modified
响应。
这提高了缓存效率并节省带宽,且无需修改代码即可启用该功能。
import { mkdirSync, existsSync, rmSync } from 'fs';
import { join } from 'path';
// 此路径长度超过 260 个字符
const longPath = join('C:\\', 'a'.repeat(270));
// 这在 Windows 上可能之前会失败
mkdirSync(longPath, { recursive: true });
console.log(`Exists: ${existsSync(longPath)}`); // Exists: true
rmSync(longPath, { recursive: true, force: true });
Bun 现已全面支持 Windows 系统中长度超过 260 个字符的文件路径。
此功能通过应用程序清单启用,可消除在具有复杂目录结构或长文件名项目中常见的文件相关错误。
// Bun 会将响应主体直接传输到 Wasm 编译器。
const { instance, module } = await WebAssembly.instantiateStreaming(fetch('http://localhost:3000/add.wasm'));
// 使用实例化的模块
console.log(instance.exports.add(2, 3)); // => 5
Bun 现已支持 WebAssembly.compileStreaming()
和 WebAssembly.instantiateStreaming()
。
这些 API 允许我们直接从流式源 (如 Response 来自 fetch() 调用) 编译并实例化 WebAssembly 模块。
另外就是 Node.js 兼容性的改进啦,总而言之呢,Bun 非常不错,大家可以一起体验和使用。
全部更新内容,请查看官方更新日志:https://bun.sh/blog/bun-v1.2.20
。