Bun 是一個速度驚人的 JavaScript 執行環境、打包器、轉譯器和套件管理器 — 功能All-in-one。
Bun v1.1.7 終於發佈了!此版本修正了 28 個錯誤(解決了 11 個 👍)。在 bun install 中使用 Glob 工作區名稱。在 expect.extends() equals 中支援非對稱匹配器。bunx --version。修復了 JSX 轉譯、sourcemaps、獨立執行檔的跨平台編譯、bun shell、RegExp、Windows 上的 Worker,以及 Node.js 相容性改進的錯誤。
我們正在舊金山招聘系統工程師,以打造 JavaScript 的未來!
先前的版本
v1.1.6
修復了 10 個錯誤(解決了 512 個 👍 反應)。我們已實作 UDP socket 支援和node:dgram
。DataDog 和 ClickHouseDB 現在可以運作了。我們修復了 v1.1.5 中node:http
的回歸問題。此外,還有 Node.js 相容性改進和錯誤修復。v1.1.5
修復了 64 個錯誤(解決了 101 個 👍)。bun build --compile 跨平台編譯獨立的 JavaScript 和 TypeScript 執行檔到其他平台。透過type: "text"
import 屬性將任何檔案作為文字匯入。引入了新的崩潰報告器。package.json
不會因為註解或尾隨逗號而產生錯誤。修復了bun run --filter
退出代碼為 0 的錯誤。修復了 bun install 中 file: 相依性的錯誤。修復了node:fs
、node:tls
、node:crypto
、node:readline
、node:http
、node:worker_threads
中的錯誤v1.1.0
Bundows。Windows 支援來了!
安裝 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
在 bun install
中使用 Glob workspace
名稱
您現在可以在 package.json
的 workspaces
中使用進階的 glob 模式,以指定要在 monorepo 中包含哪些目錄。例如
{
"name": "monorepo",
"workspaces": ["{app,packages,lib}/**"]
}
先前,我們僅支援 /*
作為模式或 workspaces
中的精確路徑。workspaces
匹配現在由 Bun.Glob
提供支援,因此您可以使用 Bun.Glob
支援的任何 glob 模式。
感謝 @zackradisic 實作此功能!
在 expect.extends()
equals 中支援非對稱匹配器
現在,當在 expect.extends()
equals 內部使用 this.equals
時,您可以在其中使用非對稱匹配器。例如
import { test, expect } from "bun:test";
expect.extend({
toCustomEqual(actual, expected) {
return { pass: this.equals(actual, expected) };
},
});
test("asymmetric matchers", () => {
expect(1).toCustomEqual(expect.anything());
expect(1).toCustomEqual(expect.any(Number));
});
先前,這會拋出錯誤。現在,它可以如預期般運作。
感謝 @anchan828 實作此功能!
bunx --version
當您執行 bunx --version
時,Bun 現在會印出版本號碼
bunx --version
1.1.7
先前,bunx --version
會印出說明選單
bunx --version
Usage: bunx [...flags] <package>[@version] [...flags and arguments]
Execute an npm package executable (CLI), automatically installing into a global shared cache if not installed in node_modules.
Flags:
--bun Force the command to run with Bun instead of Node.js
Examples:
bunx prisma migrate
bunx prettier foo.js
bunx --bun vite dev foo.js
感謝 @Electroid 修復此問題!
WebSocket 關閉代碼 1015
當 WebSocket
用戶端連線因 TLS 錯誤而連線失敗時,關閉代碼現在是 1015
而不是 1006
。這樣更準確,並有助於除錯。
const ws = new WebSocket("wss://127.0.0.1:3000");
ws.on("close", ({ code, reason }) => {
console.log(code); // 1015
console.log(reason); // "TLS handshake failed"
});
先前,關閉代碼為 1006
,這是一個通用錯誤代碼。
未處理的錯誤現在會印出 Bun 版本
當拋出頂層錯誤或 Promise 被拒絕時,Bun 現在會在結尾印出 Bun 版本
1 | function hi() {
2 | return 42;
3 | }
4 |
5 | function yo() {
6 | throw new Error("uh oh!");
^
error: uh oh!
at yo (error.js:6:9)
at hey (error.js:11:3)
at error.js:14:1
Bun v1.1.7 (macOS arm64)
當向他人尋求除錯協助時,這很有用,因為它可以省去一個問題:「您使用的是哪個 Bun 版本?」
Bun.build() 中更佳的錯誤訊息
在下一個 Bun 版本中
— Bun (@bunjavascript) 2024 年 5 月 3 日
bun build 和 https://127.0.0.1/pesCwin4Tx() 中的這個錯誤訊息顯示更多資訊,並且已修復導致不應發生此情況的錯誤。
上方:之後,下方:之前 pic.twitter.com/tAQZa42JxH
已修復:開發模式中 React 「Duplicate key」警告
在下一個 Bun 版本中
— Bun (@bunjavascript) 2024 年 5 月 3 日
轉譯器錯誤導致 React 印出「unique 'key' prop」警告的問題已修復,感謝 @JNYBGR pic.twitter.com/7qvAOJT55E
已修復:Bun Shell 中 seq
、basename
、dirname
在空輸出時會hang住
當在 Bun Shell 中使用空輸出呼叫 seq
、basename
或 dirname
時,由於未關閉輸出串流,它會無限期地hang住。這已在 Bun v1.1.7 中修復,感謝 @RanoIP。
已修復:Windows 上啟動時可能發生的崩潰
Zig 標準函式庫 std.mem.indexOfScalarPos
內 SIMD 程式碼路徑中的無效記憶體存取,可能會導致 Bun 在 Windows 上初始化期間立即崩潰。這已在 Bun v1.1.7 中修復。
此外,我們還對在指標中搜尋 sentinel 值的程式碼新增了最佳化,在適當的情況下使用 Windows wcslen
和 strlen
函式,而不是速度較慢的手動實作。
感謝 @dylan-conway 修復此問題!
已修復:程序衍生後可能發生的崩潰
在 Bun v1.1.7 中,已修復當衍生的子程序在 stdin 串流被回收之前被垃圾回收時,有時會發生的崩潰。
感謝 @gvilums 修復此問題!
已修復:在 Worker 執行時退出時崩潰
在 Bun v1.1.7 中,已修復當 Bun 在 Worker 仍在執行時退出時可能發生的崩潰。此崩潰是由於在 std::quick_exit
期間為每個執行緒執行 threadlocal 解構子所導致。
感謝 @dylan-conway 修復此問題!
已修復:在 Windows 上讀取目錄時崩潰
在 Windows 上讀取目錄時,Bun 假設 NT API 中的 FILE_DIRECTORY_INFORMATION
結構是 8 位元組對齊的,根據 Windows API 文件。但是,執行階段安全檢查證明這是錯誤的。我們已放寬程式碼中此結構的對齊要求,此崩潰應不再發生。
已修復:在 Windows 上記憶體不足時崩潰
當 mimalloc
記憶體配置器由於記憶體不足而傳回 NULL
時,Bun 會因斷言失敗(例如 mimalloc: allocated size is too small
)而崩潰。此斷言失敗僅適用於開發和測試,不適用於發佈版本(但是,我們在 Windows 上預設啟用斷言)。
這已在 Bun v1.1.7 中修復。
當系統記憶體嚴重不足或模擬記憶體不足時,將大型檔案上傳到 Bun.serve() 伺服器最容易重現此問題。
已修復:WebSocket 用戶端在 Windows 上發生連線錯誤時崩潰
已修復當 WebSocket
用戶端連線在 Windows 上連線失敗時可能發生的崩潰。我們已新增測試以防止此問題在未來再次發生。
已修復:UDP socket 現在會在有效的埠號上拋出錯誤
在 Bun v1.1.6(先前版本)中,我們引入了 Bun.udpSocket 以支援 UDP socket。
先前,所有不在 1 到 65535 之間的埠號都會被視為 0
,並使用隨機分配的埠。現在,如果提供的埠號無效,Bun.udpSocket
會拋出錯誤。
感謝 @gvilums 修復此問題!
已修復:堆疊追蹤顯示不正確的行號
Bun v1.1.7 中已修復一個導致堆疊追蹤有時顯示不正確行號的錯誤(注意:可能還有其他錯誤會導致此問題)。
此錯誤是由於 C++ 程式碼中未初始化的整數所導致。我們正在將 clang-analyzer
新增至 Bun 的 CI,以防止此情況再次發生。
已修復:sourcemap 回歸導致 bun build
hang住
Bun v1.1.6 中引入的 sourcemap 回歸導致 bun build 無限期地hang住。這已在 Bun v1.1.7 中修復,並且我們已新增整合測試以防止此問題在未來再次發生。
在類似這樣的「hello world」express.js 應用程式上使用 bun build --sourcemap=external
會hang住
const express = require("express");
const app = express();
const port = 3000;
app.get("/", (req, res) => {
res.send("Hello World!");
});
app.listen(port, () => {
console.log(`Example app listening on port ${port}`);
});
我們已新增整合測試,以確保來自 bun build --compile --minify
的輸出可以成功執行簡單的 express.js 應用程式。
已修復:可執行檔往返 Windows 的跨平台編譯
跨平台編譯 <> Windows 有一個檔案路徑錯誤,我們假設如果目前的平台是 Windows 或 posix,則使用該平台的檔案路徑前綴,而不是跨平台編譯目標的平台。此錯誤已修復,感謝 @gvilums。
已修復:未讀取的伺服器端請求 body 中的記憶體洩漏回歸
在 Bun v1.0.30 - Bun v1.1.6 中,Bun.serve() 的未讀取傳入 HTTP 請求 body 未被正確清除。這也適用於 node:http
伺服器。
這表示選擇不讀取傳入請求的 body 可能會無限期地消耗記憶體。這已在 Bun v1.1.7 中修復,感謝 @cirospacari,並且我們已新增回歸測試以防止此問題再次發生。
已修復:fs.fdatasync 錯誤中缺少 fd
當 fs.fdatasync
中拋出錯誤時,錯誤物件中缺少 fd
屬性。這已在 Bun v1.1.7 中修復,感謝 @nektro。
已修復:自訂 inspect 例外
當自訂 inspect 函式拋出例外時,Bun 會傳回 [native code]
。這令人困惑。我們希望可以將其變更為拋出錯誤,但這將會是破壞性變更。相反地,我們已將其變更為印出 [custom formatter threw an exception]
,這稍微好一些,但不是我們想要的。在未來的 Bun 版本中,我們將會將其變更為拋出錯誤,但我們不希望您的程式碼在次要版本更新中可能隨機中斷。
ServerWebSocket 微幅最佳化
Zig 中 ServerWebSocket
表示法的記憶體內大小已從 32 位元組縮減為 24 位元組。您可能不會注意到記憶體節省,但由於更好的快取區域性,它可能會使某些函式執行得更快。
使用自訂 inspect fn 的 console.log 效能提升 8%
在下一個 Bun 版本中
— Jarred Sumner (@jarredsumner) 2024 年 5 月 3 日
在 console.log/error 中使用自訂 inspect 函式效能提升 8% pic.twitter.com/FLUwX0k6wB