Bun v1.0.9 修復了影響在 Vercel 和舊款 CPU 上使用的回歸錯誤、一個 Bun.spawn
錯誤、與 peer dependency 安裝相關的邊緣案例,以及一個 JSX 轉譯器錯誤修復。
Bun 是一個速度驚人的 JavaScript 執行時環境、打包器、轉譯器和套件管理器 — 功能All-in-one。如果您錯過了,這裡列出 Bun 最近的一些變更
v1.0.0
- 首個穩定版本!v1.0.1
- 為 .json 和 .toml 檔案新增具名匯入,修復了bun install
、node:path
和Buffer
v1.0.2
- 讓--watch
更快並修復大量錯誤v1.0.3
-emitDecoratorMetadata
和 Nest.js 支援,修復了私有 registry 等問題v1.0.4
-server.requestIP
、runtime plugins 中的虛擬模組等等v1.0.5
- 修復了fetch()
的記憶體洩漏、node:crypto
模組中的KeyObject
支援、bun:test
中的expect().toEqualIgnoringWhitespace
等等v1.0.6
- 修復了 3 個錯誤(解決了 85 個 👍 反應),在package.json
中實作了overrides
和resolutions
,並修復了影響 Docker 使用 Bun 的回歸錯誤v1.0.7
- 修復了 59 個錯誤(解決了 78 個 👍 反應),在bun install
中實作了可選的 peer dependencies,並改進了 Node.js 相容性。v1.0.8
- 修復了 138 個錯誤(解決了 257 個 👍 反應),讓require()
使用的記憶體減少 30%,為bun test
新增了模組模擬,修復了更多bun install
錯誤
安裝 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
「Illegal instruction」和 v1.0.8 版本的 glibc 符號版本回歸錯誤已修復
在 Bun v1.0.8 中,我們將內部建置系統從客製化的 2,000 行 Makefile
移至 CMake 和 Ninja。這是為了簡化我們為貢獻者提供的建置系統,並讓在 Windows 上建置 Bun 更加容易。
在此過程中,出現了三個回歸錯誤
- Bun v1.0.8 在舊款 CPU(例如 Intel Xeon E5-2670 v1)和某些 Linux arm64 CPU 上會因「Illegal instruction」錯誤而崩潰。這影響了 Docker 使用者和舊款 CPU 的使用者。
- Bun v1.0.8 對於使用低於 glibc 2.28 的使用者會因「symbol not found」錯誤而崩潰。這影響了 Vercel 使用者和舊版 Linux 發行版的使用者。
bun init
會在README.md
中錯誤地印出版本號碼
這些回歸錯誤已修復,但對於 1.0 版本後的產品來說,這令人感到抱歉,我在此致歉。
以下是我們為防止再次發生這種情況所做的措施
- 我們正在新增一個 CI 工作,該工作會在搭載舊款 CPU 的機器上執行,以測試 Bun 在舊款 CPU 上的效能
- 我們正在新增一個 CI 工作,以檢查 Bun 最終可執行檔使用的 glibc 最低版本,如果它請求的版本太新,則會擲回錯誤
- 我們新增了一個測試,以確保
bun init
在README.md
中印出正確的版本號碼
Bun.spawn 錯誤修復
此版本修復了 Bun.spawn
中的兩個錯誤。我們也為 Bun.spawn
新增了更多測試。
已修復:await spawn(...).exited
有時會傳回字串
await child.exited
有時會傳回字串而不是數字。該字串是導致程序結束的訊號。
import { spawn } from "bun";
const child = spawn(["sleep", "1"]);
child.kill();
const code = await child.exited;
// Before:
console.log(code); // "SIGHUP"
// After:
console.log(code); // 129
現在 await child.exited
會傳回數字,而不是字串。這與我們的 TypeScript 類型宣告、文件說明以及 bash 的結束代碼行為一致。
如果程序正常結束,則傳回 0
。如果程序因訊號而結束,則傳回 128
+ 訊號編號。例如,如果程序因 SIGTERM
而結束,則會傳回 128 + 15 = 143
。
已修復:導致 await spawn(...).exited
無法解析的邊緣案例
可能導致 await spawn(...).exited
無法解析的邊緣案例已修復。
bun install
peer dependency 版本過多錯誤修復
在此版本中,我們開始將其他套件管理器的某些測試移植到 Bun。
其中一個測試發現一個問題,Bun 無法重複使用現有專案中 peer dependency 的版本。此問題已修復,以符合 npm 的行為。
當 peer dependency 的選定版本與 package.json
中指定的版本範圍不相容時,我們也新增了一個警告。
JSX 轉譯器錯誤修復
以下任一行程式碼先前都會因斷言失敗而導致執行階段 panic
<A key={() => {}} b={class {}} />
<A key={() => {}} b={() => {}} />
此問題已修復。
此錯誤是由於對 key
prop 的特殊處理導致 AST 節點未按照剖析順序被訪問。如果 key
prop 建立了一個作用域(例如定義函數或類別),則可能會發生此錯誤。
感謝 @dylan-conway 修復此錯誤!