Skip to content

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

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

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


在没有 All in Bun 之前,我一直用的都是 pnpm

作为一个 间歇性偏执狂,用 pnpm 的时候,我是坚决不用 npmbun 的 (除非迫不得已)。

什么叫 All in Bun 呢?就是我本地和服务器上,执行 npm -vpnpm -v 都是 未找到命令,只有一个 Bun 用来运行,管理,编译等等一切相关操作。

有个问题困扰我已久,简直如鲠在喉,如芒在背,那就是 bun 不支持 bun update -r 命令,也就是不支持一键更新 Monorepo (单仓库多项目) 单体架构的依赖。

如上图,如果我要更新 packages 中的所有子包的依赖,就得一个个进入该目录,一个个更新,非常繁琐,十分麻烦。

我已经在 bun 官方的帖子下提出支持 bun update -r 命令至少 3 次以上,望眼欲穿了好几个版本都没有进行支持。

今天,这个命令终于支持了。

迫不及待地测试了一下,整个人都舒服了,望穿秋水,水终于来了。

除此之外,CPU 的空闲利用率提高了。

当执行 bun install 的时候,如果 yarn.lockv1 版本,则会自动升级到 bun.lock

AbortSignal.timeout 的速度提高了 40倍

js
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 响应。

这提高了缓存效率并节省带宽,且无需修改代码即可启用该功能。

js
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 个字符的文件路径。

此功能通过应用程序清单启用,可消除在具有复杂目录结构或长文件名项目中常见的文件相关错误。

js
// 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

何以解忧,唯有代码。不忘初心,方得始终。