Bun v1.1.28 發布了!此版本修復了 40 個錯誤 (解決了 51 個 👍)。從 JavaScript 編譯 & 執行 C 語言。path.resolve
快了 30 倍。Windows 上的具名管道。多項 Node.js 相容性改進和錯誤修復。
我們正在舊金山招募系統工程師,以打造 JavaScript 的未來!
安裝 Bun
curl -fsSL https://bun.dev.org.tw/install | bash
npm install -g bun
powershell -c "irm bun.sh/install.ps1|iex"
scoop install 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
從 JavaScript 編譯 & 執行 C 語言
Bun 現在支援從 JavaScript 編譯和執行 C 語言。這是一種從 JavaScript 使用原生系統函式庫的簡單方法,無需額外增加建置步驟。
在這裡瞭解更多關於此功能的資訊。
path.resolve
快了 30 倍
此版本讓 path.resolve
快了 30 倍。
在下一個 Bun 版本中
— Jarred Sumner (@jarredsumner) 2024年9月12日
path.resolve() gets 30x faster pic.twitter.com/ukdAHtK6lT
Windows 上的具名管道
感謝 @cirospaciari!Bun 現在在許多 Node.js 和 Bun API 中支援 Windows 上的具名管道!具名管道很有趣,因為它們不完全是磁碟上的檔案。它們是另一種東西,有點像 Unix 網域套接字,但也不盡然。
Node.js 相容性改進
process._exiting
設定為 false
以前,process._exiting
在發出 exit
事件之前會設定為 undefined
。現在,它將會是 false
console.log(process._exiting); // Previously: `undefined`, now: `false`
process.on("exit", () => {
console.log(process._exiting); // true
});
workerData
從 worker_threads
預設為 null
workerData
的預設值已從 undefined
變更為 null
。
import { workerData } from "worker_threads";
console.log(workerData); // Previously: `undefined`, now: `null`
已新增 perf_hooks
中遺失的常數
以下常數先前在 perf_hooks
模組中遺失
import { constants } from "perf_hooks";
console.log(constants.NODE_PERFORMANCE_MILESTONE_BOOTSTRAP_COMPLETE); // 7
console.log(constants.NODE_PERFORMANCE_MILESTONE_ENVIRONMENT); // 2
console.log(constants.NODE_PERFORMANCE_MILESTONE_LOOP_EXIT); // 6
console.log(constants.NODE_PERFORMANCE_MILESTONE_LOOP_START); // 5
console.log(constants.NODE_PERFORMANCE_MILESTONE_NODE_START); // 3
console.log(constants.NODE_PERFORMANCE_MILESTONE_TIME_ORIGIN_TIMESTAMP); // 0
console.log(constants.NODE_PERFORMANCE_MILESTONE_TIME_ORIGIN); // 1
console.log(constants.NODE_PERFORMANCE_MILESTONE_V8_START); // 4
console.log(constants.NODE_PERFORMANCE_ENTRY_TYPE_DNS); // 4
console.log(constants.NODE_PERFORMANCE_ENTRY_TYPE_GC); // 0
console.log(constants.NODE_PERFORMANCE_ENTRY_TYPE_HTTP); // 1
console.log(constants.NODE_PERFORMANCE_ENTRY_TYPE_HTTP2); // 2
console.log(constants.NODE_PERFORMANCE_ENTRY_TYPE_NET); // 3
修復了為 node:zlib
提供的未定義選項的邏輯
node:zlib
中的選項處理已修復,允許選項為 undefined
而不會導致錯誤。
import { createGzip } from "zlib";
createGzip({ level: undefined });
OutgoingMessage.headersSent
從 node:http
現在設定為 true
在標頭發送後,req.headersSent
將會設定為 true
新增了 timers.promises
為了更好地與 Node.js 相符,node:timers/promises
的匯出現在也可在 timers.promises
中使用。
import { promises } from "timers";
console.time("timeout");
await promises.setTimeout(1000);
console.timeEnd("timeout"); // [1002.48ms] test
修復:在產生程序之前,cwd
會在 node:child_process
中搜尋可執行檔之前更新
以前,Bun 會在呼叫程序的 cwd
中搜尋要產生的可執行檔。如果提供了不同的 cwd
,並且為可執行檔路徑提供了相對路徑,則預期的可執行檔將無法找到。現在,Bun 將從目標 cwd
搜尋。
import { spawnSync } from "child_process";
import { join } from "path";
// This will search for `foo` in `./node_modules/package/bin/`
spawnSync("./bin/foo", { cwd: join(import.meta.dir, "node_modules/package") });
修復:napi 可逸出控制代碼作用域中的崩潰
感謝 @190n!已修復 napi 可逸出控制代碼作用域可能導致 Bun 崩潰的錯誤。
修復:napi 控制代碼作用域最終確定中的崩潰
感謝 @190n 的修復!已修復在呼叫 napi finalizer 然後我們嘗試分配控制代碼作用域時會發生的錯誤。這會在 sqlite3
套件的某些情況下導致崩潰。這是 v1.1.27 的回歸問題。
更多修復和改進
修復了 bun install
中 os
和 cpu
欄位的邊緣情況
在某些情況下,bun install
中的 os
和 cpu
欄位無法正確處理排除,導致始終跳過安裝。這已修復。
我們還在 bun install --verbose
中新增了一條額外的記錄訊息,以便更輕鬆地偵錯套件被跳過的原因。
修復:透過 bun run
的 IPC
感謝 @snoglobe!以前,如果您產生一個啟用了 IPC 的 bun run
程序,則 IPC 套接字將在子程序可以使用它之前關閉。這已修復。
修復:Windows 上的不區分大小寫的監看模式
感謝 @dylan-conway!在 Windows 上,監看模式在某些情況下不會偵測到區分大小寫的檔案的變更。這已修復。
修復:bun ./bun.lockb
會印出環境已載入訊息
感謝 @snoglobe!如果您執行 bun ./bun.lockb
,並且在同一個目錄中有一個 .env
檔案,Bun 會印出訊息告訴您它已載入 .env
檔案。它不應該載入 .env
檔案,但無論如何,當它載入 .env
檔案時也不應該印出訊息,因為當您只是想從 bun.lockb
查看印出的 yarn.lock
時,這會造成雜訊。這已修復。
修復:Windows 上的 Bun.file(path).text()
有時無法讀取到檔案末尾
感謝 @190n!在 Windows 上,在某些情況下,Bun.file(path).text()
無法讀取到檔案末尾。這已修復。
修復:React 19 生產模式 SSR
React 19 變更了用於識別 JSX 元素的符號。這破壞了 Bun 的 JSX 內聯最佳化。為了繼續支援 React 19,我們暫時停用了最佳化。
感謝 @paperclover 的修復!
修復:TextDecoder 導致 DOMJIT 崩潰
已修復從 TextDecoder
拋出例外時可能發生的崩潰。DOMJIT 是 JavaScriptCore 中的一個很棒的功能,它允許我們在建置時利用型別資訊來呼叫原生實作的 JS 函數,速度快約 30%。我們在不久前新增了對型別陣列的支援,但已被證明在某些情況下會導致崩潰 - 因此我們暫時停用它,並將在我們使此 API 更穩健後重新啟用它。