Bun v0.5.9 引入使用 bun --watch
的監看模式,新增對 bun install
中 tarball 依賴項的支援,並修正大量錯誤以提升穩定性和相容性。
curl -fsSL https://bun.dev.org.tw/install | bash
npm install -g bun
brew tap oven-sh/bun
brew install bun
docker pull oven/bun
docker run --rm --init --ulimit memlock=-1:-1 oven/bun
升級 Bun
bun upgrade
監看模式
Bun 現在支援使用 bun --watch
的監看模式,當您變更檔案時,它會自動重新啟動您的應用程式。這在開發中很有用,可以快速查看您對程式碼所做的變更。它是 nodemon
的內建替代方案,速度明顯更快。
使用 bun --watch
執行檔案
"bun --watch ./watchy.tsx" pic.twitter.com/qi7zCvx37p
— Jarred Sumner (@jarredsumner) 2023年3月29日
使用 bun test --watch
執行測試
"bun test --watch url" 在一個包含多個以 "url" 開頭的檔案的大型資料夾中 pic.twitter.com/aZV9BP4eFu
— Jarred Sumner (@jarredsumner) 2023年3月29日
Bun 仍然支援 bun --hot
,它嘗試重新載入您的應用程式碼,而無需重新啟動整個程序。當使用 Bun.serve
開發伺服器時,這特別有用,尤其是有像 WebSockets 這樣的長連線時。但在大多數情況下,--watch
是一個更好的通用工具。
Tarball 依賴項
您現在可以在 package.json
中使用 tarball 依賴項。Bun 將從指定的 tarball URL 下載並安裝套件,而不是從 npm(或您已設定的任何套件 registry)下載。
{
"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:http2
和node:vm
)時,我們也改進了錯誤訊息。
改善了尚未實作的 node.js 內建模組的錯誤訊息 pic.twitter.com/U9VQK5Yk1q
— Jarred Sumner (@jarredsumner) 2023年4月2日
展望未來
即將推出新的 JavaScript 打包器,包括對 server components 的內建支援。
server components 即將在 Bun v0.6.0 中推出 pic.twitter.com/ZfcIewP3HE
— Jarred Sumner (@jarredsumner) 2023年4月3日
更新日誌
#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 貢獻 |
#2497 | 在 bun 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,包括 v8 、trace_events 、repl 、inspector 、http2 、diagnostics_channel 、dgram 和 cluster ,由 @Jarred-Sumner 貢獻 |
#2536 | 減少 bun install 期間的並行 HTTP 連線數,由 @alexlamsl 貢獻 |
貢獻者
最後,感謝社群中所有協助改進此版本 Bun 的貢獻者:@jq170727、@JacksonKearl、@johnnyreilly、@gaurishhs、@Fire-The-Fox、@bnzone、@JokerQyou、@andres039、@Validark、@adrien-zinger、@jakeboone02