Bun 是一個速度極快的 JavaScript 執行環境、打包器、轉譯器和套件管理器 — 功能All-in-one。如果您錯過了,這裡列出 Bun 最近的一些變更。
此版本修正了 9 個錯誤,並新增了 Bun Shell,這是一個快速的跨平台 Shell,具有無縫的 JavaScript 互操作性。修正了 socket timeout 錯誤、socket 關閉時可能發生的崩潰、Hapi 的 Node.js 相容性問題、process.exit 錯誤,以及 bun install binlinking 錯誤、bun inspect 回歸錯誤和 bun:test expect().toContain 錯誤。
先前的版本
v1.0.23
修正了 40 個錯誤(解決了 194 個 👍 反應)。在 Bun 中導入和嵌入 sqlite 資料庫、資源管理 ('using' TC39 stage3) 支援、為 Node.js 建置時的打包器改進、peer dependency 解析的錯誤修正、semver 錯誤修正、Linux 上 TCP 速度提升 4%、Node.js 相容性改進以及更多內容"v1.0.22
修正了 29 個錯誤(解決了 118 個 👍 反應),修正了 Vercel 上bun install
的問題,新增了performance.mark()
API,為額外的管道新增了child_process
支援,使Buffer.concat
更快,新增了toBeEmptyObject
和toContainKeys
匹配器,修正了使用 emoji 的console.table
寬度,並支援worker_threads
中的argv
和execArgv
選項,以及在fetch
中支援 Brotli。v1.0.21
- 修正了 33 個錯誤(解決了 80 個 👍 反應)。console.table()
支援。Bun.write
、Bun.file 和 bun:sqlite 使用更少的記憶體。使用 FormData 上傳大型檔案時使用更少的記憶體。bun:sqlite 錯誤訊息變得更詳細。修正了 node:fs 錯誤中的記憶體洩漏。Node.js 相容性改進,以及許多崩潰已修正。
安裝 Bun
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 Shell
Bun Shell 是 Bun 中一個實驗性的嵌入式語言和直譯器,可讓您在 JavaScript 和 TypeScript 中執行跨平台 shell 腳本。
import { $, file } from "bun";
const resp = await fetch("https://example.com");
const stdout = await $`gzip -c < ${resp}`.arrayBuffer();
// as a file()
await $`ls *.js > ${file("output.txt")}`;
// or as a file path string, if you prefer:
await $`ls *.js > output.txt`;
await $`ls *.js > ${"output.txt"}`;
// Get the output as text
const combined = await $`cat ./1.txt ./2.txt`.text();
// iterate over the output line-by-line
for await (let line of $`cat ./1.txt ./2.txt`.lines()) {
console.log(line);
}
閱讀更多關於 Bun Shell 的部落格文章,或閱讀文件。
已修正:socket timeout 行為
在 Node.js 中,當 net.Socket
超時時,它會發出 timeout
事件。在 Bun 中,我們發出了 timeout
事件,但我們也關閉了 socket。這不是 Node.js 的行為,也不是使用者期望的,因此我們修正了它。這也適用於 Bun.connect()
和 Bun.listen()
。
已修正:socket 關閉時可能發生的崩潰
已修正當頻繁連接和斷開 socket 連接時(通常是資料庫客戶端)可能發生的崩潰
perf_hooks
的 Node.js 相容性改進
先前,Hapi (@hapi/hapi
) 在 Bun 中無法運作,因為未定義 perf_hooks.eventLoopUtilization
函數。Bun 現在定義了它,並為所有指標返回空值,這解鎖了 Hapi。
已修正:在某些情況下,process.exit 拋出「exitCode 不是數字」錯誤
process.exit(eval("1.234 - 0.234"))
會在 Bun 中拋出錯誤,但在 Node.js 中則不會。此問題已修正。
錯誤在於 Bun 如何讀取 process.exit
函數中的 exitCode
參數。JavaScriptCore 的 JSValue 將 1.234 - 0.234
表示為 64 位元浮點數,即使它在技術上只是有符號的 32 位元整數 1
。Bun 的程式碼專門檢查表示形式是否為有符號的 32 位元整數,而不是任何整數,這導致了錯誤。修復方法是檢查值是否為整數,而不是有符號的 32 位元整數。
此錯誤影響了 Prisma CLI,它在發生錯誤時使用 process.exit
以非零退出代碼退出進程。
已修正:在 bun install 中使用懸置符號連結的 bin linking
當符號連結已存在但指向不再存在的路徑時,bun install
不會覆寫符號連結。此問題已修正,感謝 @dylan-conway。
已修正:在 bun --inspect
中使用完整 URL 的回歸錯誤
當在 bun --inspect
中使用完整 URL 時,URL 無法正確解析。此問題已修正,感謝 @Electroid。
已修正:expect().toContain("") 行為不正確
bun:test
的 expect(a).toContain("")
實作行為與 Jest 不一致的錯誤已修正,感謝 @DontBreakAlex。
已修正:path.parse 邊緣案例
給定字串 path.parse('.prettierrc')
,Bun 中的 path.parse
函數在 Bun 和 Node.js 中會返回不同的結果。
現在 Bun 返回與 Node.js 相同的結果,感謝 @Aarav-Juneja。
已修正:遞迴 console.log 中的 hang
已修正當函數在 console.* 內記錄時發生的 hang,感謝 @LukasKastern。