Bun

Bun v0.5.9


Ashcon Partovi · 2023年4月4日

Bun v0.5.9 引入使用 bun --watch 的監看模式,新增對 bun install 中 tarball 依賴項的支援,並修正大量錯誤以提升穩定性和相容性。

curl
npm
brew
docker
curl
curl -fsSL https://bun.dev.org.tw/install | bash
npm
npm install -g bun
brew
brew tap oven-sh/bun
brew install bun
docker
docker pull oven/bun
docker run --rm --init --ulimit memlock=-1:-1 oven/bun

升級 Bun

bun upgrade

監看模式

Bun 現在支援使用 bun --watch 的監看模式,當您變更檔案時,它會自動重新啟動您的應用程式。這在開發中很有用,可以快速查看您對程式碼所做的變更。它是 nodemon 的內建替代方案,速度明顯更快。

使用 bun --watch 執行檔案

使用 bun test --watch 執行測試

Bun 仍然支援 bun --hot,它嘗試重新載入您的應用程式碼,而無需重新啟動整個程序。當使用 Bun.serve 開發伺服器時,這特別有用,尤其是有像 WebSockets 這樣的長連線時。但在大多數情況下,--watch 是一個更好的通用工具。

Tarball 依賴項

您現在可以在 package.json 中使用 tarball 依賴項。Bun 將從指定的 tarball URL 下載並安裝套件,而不是從 npm(或您已設定的任何套件 registry)下載。

package.json
{
  "dependencies": {
    "zod": "https://registry.npmjs.org/zod/-/zod-3.21.4.tgz"
  }
}

使用 tarball URL 來包含不在 registry 或私有託管中的依賴項。

錯誤修正

在此版本中,我們修正了許多錯誤,以下是一些有趣的重點。

  • 當協議為非 HTTP 時,url.origin 屬性為 "null"
test("url.origin is null when protocol is non-http", () => {
  expect(new URL("https://example.com")).toHaveProperty(
    "origin",
    "https://example.com",
  );
  expect(new URL("file://path/to/file")).toHaveProperty("origin", "null");
  expect(new URL("about:blank")).toHaveProperty("origin", "null");
});
  • Set-Cookie 標頭不再重複資料刪除。
test("headers can handle duplicate set-cookie headers", () => {
  const headers = new Headers([["Set-Cookie", "foo=bar"]]);
  headers.append("set-Cookie", "foo=baz");
  expect([...headers]).toEqual([
    ["set-cookie", "foo=bar"],
    ["set-cookie", "foo=baz"],
  ]);
});
  • 現在,無效的 Date 會以 "Invalid Date" 進行 console.log()
test("invalid date inspects as 'Invalid Date'", () => {
  expect(Bun.inspect(new Date("hello world"))).toBe("Invalid Date");
});
  • Node.js 的 util.isError() 函式現在適用於「類似 Error」的物件。
test("util.isError() works for non-native errors", () => {
  const actual = util.isError({ name: "Error", message: "an error occurred" });
  expect(actual).toBe(true);
});
  • 當您匯入 Bun 中尚未實作的 Node.js 模組(如 node:http2node:vm)時,我們也改進了錯誤訊息。

展望未來

即將推出新的 JavaScript 打包器,包括對 server components 的內建支援。

更新日誌

#2425改進 zsh 補全功能,以包含目錄,由 @JacksonKearl 貢獻
#2429更新 moduleResolution 在 tsconfig.json 中為 "bundler",由 @johnnyreilly 貢獻
#2414改進 EventEmitter 的型別,使其具備型別安全性,由 @gaurishhs 貢獻
58a5c2a修正 export namespace ns { export class F {} } 造成的崩潰問題,由 @Jarred-Sumner 貢獻
#2458修正各種失敗的測試,由 @dylan-conway 貢獻
#2459修正 undici 的測試,由 @ThatOneBro 貢獻
#2463修正以 "/" 結尾的 npm registry 的問題,由 @Jarred-Sumner 貢獻
#2490修正來自 http.request() 的 HTTPS 請求的不正確 port,由 @cirospaciari 貢獻
#2497bun install 中實作 tarball URL 支援,由 @alexlamsl 貢獻
#2486修正更多錯誤,包括 escapeHTML()util.isError(),由 @Jarred-Sumner 貢獻
#2500實作監看模式:bun --watch,由 @Jarred-Sumner 貢獻
#2501修正來自帶有 FormData body 的 request.json() 的崩潰問題,由 @Jarred-Sumner 貢獻
#2506改進 yarn lockfile 印表機的相容性,由 @Validark 貢獻
#2474修正 "Invalid Date" 格式的錯誤,由 @adrien-zinger 貢獻
#2519修正使用 bun install 重新安裝 git 依賴項時的錯誤,由 @alexlamsl 貢獻
#2534為各種未實作的 node 模組新增 stubs,包括 v8trace_eventsreplinspectorhttp2diagnostics_channeldgramcluster,由 @Jarred-Sumner 貢獻
#2536減少 bun install 期間的並行 HTTP 連線數,由 @alexlamsl 貢獻

貢獻者

最後,感謝社群中所有協助改進此版本 Bun 的貢獻者:@jq170727@JacksonKearl@johnnyreilly@gaurishhs@Fire-The-Fox@bnzone@JokerQyou@andres039@Validark@adrien-zinger@jakeboone02