Bun 是一個速度極快的 JavaScript 執行階段、打包器、轉譯器和套件管理器 — 功能All-in-One。
Bun v1.1.2 修復了 4 個錯誤(解決了 44 個 👍 表情符號)。已修復 Windows 上 vite dev、next dev 和儲存 bun.lockb 時的 EBUSY 問題。Bun Shell 取得 seq、yes、basename 和 dirname 的支援。已修復 TypeScript 解析的邊緣案例。已修復導致「無法到達的程式碼」錯誤的錯誤。已重寫 Windows 上的 fs.watch 以提升效能和可靠性。
先前的版本
v1.1.1
Bun v1.1.1 修復了 20 個錯誤(解決了 60 個 👍 表情符號)。新增子 Shell 和位置引數支援。錯誤中列印的原始碼不再填滿您的終端機。升級 JavaScriptCore,其中包括 RegExp、類型陣列、String indexOf 和 String replace 的效能改進。錯誤物件和 JIT 編譯的函式呼叫使用更少的記憶體。修復了 Windows 上 bun install 的數個錯誤。修復了 Windows 上 Bun.serve() 的錯誤。修復了影響 .toml 檔案中跳脫序列和 Windows 路徑的 TOML 解析器錯誤。v1.1.0
Bundows。Windows 支援來了!此外,還有 JSON IPC Node <-> Bun。
安裝 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
Windows 支援改進
已修正:儲存 bun.lockb 時的 EBUSY
在將依賴項新增至 bun.lockb
時,有時 Windows 上的 bun install
會擲回 EBUSY
錯誤。這是因為檔案控制代碼開啟時間過長且未請求正確的權限所導致。
Windows 權限仍然很複雜。
已修正:在 Windows 上將 tarball 解壓縮到快取時的 ENOENT
和 EEXIST
錯誤
有時,套件在 Windows 上安裝失敗,原因是解壓縮 npm 套件的 tarball 時發生競爭條件,導致 ENOENT
或 EEXIST
錯誤。此錯誤主要是由於在開啟新 tarball 的目錄時請求了錯誤的權限所導致。我們已使程式碼更具錯誤容忍性,現在它將請求正確的權限。
已修正:在 Windows 上使用 next dev
或 vite dev
時的 EBUSY
v1.1.0 中的迴歸問題導致在 Windows 上執行 next dev
和 vite dev
時擲回 EBUSY
錯誤。主要原因是權限問題。我們在不需要時保持開啟受監看目錄的檔案控制代碼。
我們已更新整合測試,以在未來捕捉到此錯誤。
在此過程中,我們已重寫 fs.watch
在 Windows 上的運作方式。fs.watch
將自動重複資料刪除檔案系統路徑,因此如果多個監看器監看相同的路徑,它將僅使用其中一個監看器的資源。這應使 fs.watch
更快、更可靠且使用更少的記憶體。
已修正:bun install
無法安裝具有無效檔案路徑的 tarball
Windows 不支援檔案路徑中包含 ?
、<
、>
等字元。有時,npm 套件在其發佈的 tarball 的檔案路徑中包含這些字元。Bun 之前未正確處理此問題。現在,bun install
在 Windows 上的行為與 npm install
相同,並成功安裝套件,但會插入取代字元。
已修正:CouldntReadCurrentDirectory
錯誤
Bun 在目錄中請求過多權限,這可能會導致 Windows 上非管理員帳戶擲回 CouldntReadCurrentDirectory
錯誤。
重寫 Windows 上的 fs.watch
我們重寫了 Windows 上 fs.watch
的實作,使其更可靠且更快速。
現在它會在內部重複資料刪除正在監看的檔案路徑,從而在 glob 中使用 fs.watch 之類的功能時減少資源使用量。
Shell 和 bun run 改進
在 Bun Shell 中支援 seq
、yes
、basename
和 dirname
現在 Bun Shell 中支援 GNU Coreutils 命令 seq
、yes
、basename
和 dirname
,感謝 @nektro。
import { $ } from "bun";
await $`seq 0 3`;
// 0
// 1
// 2
// 3
await $`basename $1`; // hello.js
await $`dirname $1`; // foo
已修正:環境變數中 *
的解析錯誤
已修復環境變數中 *
的一些解析錯誤,感謝 @zackradisic。
已修復可能導致 bun install
暫停一段時間的錯誤。
Bun install 改進
在沒有 lockfile 的情況下安裝 --production
您現在可以在沒有 lockfile 的情況下使用 bun install --production
和 bun install --frozen-lockfile
。這對於您可能沒有將 bun.lockb
簽入 git
的 CI 環境很有幫助。之前沒有真正的原因禁止這樣做,因此我們只是取消了禁令。
已修正:下載 tarball 時可能發生的崩潰
已修復可能導致 bun install
在下載 tarball 時崩潰的錯誤。這有時會在 Windows 版 Bun 中導致「Unreachable code reached」錯誤。
WebKit 升級
我們再次升級了 WebKit!令人驚嘆的 @Constellation 和 JSC 團隊為我們帶來了新的效能改進和錯誤修復。
快 5 倍的 { ...obj }
複製
在微基準測試中,如下所示的程式碼現在執行速度快了 5 倍
{ ...obj }
此最佳化特定於具有單個 ...
展開運算符的空物件字面量。
❯ bun splat.mjs
cpu: Apple M1 Max
runtime: bun 1.1.2 (arm64-darwin)
benchmark time (avg) (min … max) p75 p99 p995
-------------------------------------------------- -----------------------------
{ ...obj } 20.33 ns/iter (18.38 ns … 92.75 ns) 20.08 ns 49.05 ns 53.68 ns
❯ bun-1.1.0 splat.mjs
cpu: Apple M1 Max
runtime: bun 1.1.0 (arm64-darwin)
benchmark time (avg) (min … max) p75 p99 p995
-------------------------------------------------- -----------------------------
{ ...obj } 105.38 ns/iter (100.83 ns … 188.37 ns) 103.29 ns 146.97 ns 149.57 ns
import { bench, run } from "mitata";
const obj = {
a: 1,
b: 2,
c: 3,
d: 4,
e: 5,
f: 6,
g: 7,
h: 8,
i: 9,
};
bench("{ ...obj }", () => {
return { ...obj };
});
await run();
解析器改進
已修正:TypeScript 解析邊緣案例
一個錯誤導致 Bun 的解析器無法解析以下 TypeScript 程式碼
var bar: Bar extends string | infer Bar extends string ? Bar : never;
var bar: Bar extends string & infer Bar extends string ? Bar : never;
此錯誤已修復,感謝 @dylan-conway。