Bun v1.1.16 釋出了!此版本修正了 41 個錯誤(解決了 221 個 👍)。bun test 中 lcov 程式碼涵蓋率報告、從包含 Gitlab 和 Bitbucket 的私人 git 儲存庫安裝依賴項。Buffer.from(string, "base64")
在大型輸入上速度提升了 6 到 30 倍。修復了 bun patch
、bun install
、N-API 附加元件、轉譯器錯誤修復和 Node.js 相容性改進的錯誤。
我們正在舊金山招聘系統工程師,以建構 JavaScript 的未來!
先前的版本
v1.1.14
修復了 63 個錯誤(解決了 519 個 👍)。使用bun patch
修補 node_modules。bun:sqlite
中無 ORM 的物件映射。將所有fetch()
呼叫記錄為curl
命令。Node.js 相容性改進。bun install 錯誤修復、bun:sqlite
錯誤修復、Windows 錯誤修復。以及更多。v1.1.10
修復了 20 個錯誤。在 Windows 上,未快取的 bun install 速度提升了 2 倍。fetch()` 使用的記憶體最多減少了 2.8 倍。bun install、sourcemaps、Windows 穩定性改進和 Node.js 相容性改進的多項錯誤修復
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
LCOV 程式碼涵蓋率報告器
當使用 bun test --coverage
時,可以使用 --coverage-reporter lcov
將涵蓋率報告匯出為標準 lcov 格式
bun test --coverage --coverage-reporter lcov
預設情況下,這會輸出一個 coverage/lcov.info
檔案。可以使用 --coverage-dir
變更涵蓋率目錄
若要始終啟用涵蓋率報告,已將兩個新選項新增至 bunfig.toml
[test]
# always enable coverage
coverage = true
# new
coverageReporter = ["text", "lcov"] # default ["text"]
coverageDir = "./path-to-folder" # default "coverage"
感謝 @exoego 實作此功能。
bun install git ssh 儲存庫
bun install 現在支援透過 ssh 進行身分驗證,以從私人 git 儲存庫安裝依賴項。這些依賴項會透過 git clone
使用您的 git SSH 金鑰進行克隆。
bun i git@github.com:paperclover/secret-utilities.git
installed secret-utilities@git+ssh://git@github.com:paperclover/secret-utilities.git#5a7279074f22e98d64507cb5149633c73897395f
1 package installed [904.00ms]
這使得在使用來自 Gitlab、Bitbucket 或其他 git 託管服務的私人儲存庫時,bun install
更易於使用。GitHub 儲存庫有時會受到此問題的影響,但頻率較低。
感謝 @Eckhardt-D 實作此功能!
Buffer.from(string, "base64")
在大型輸入上速度提升了 6 到 30 倍
透過將我們的 base64 解碼實作變更為使用 simdutf,使用 Buffer.from(string, "base64")
速度更快,尤其是在大型輸入上
在下一個 Bun 版本中
— Jarred Sumner (@jarredsumner) June 19, 2024
Buffer.from(str, "base64") gets 6x - 30x faster on large input, thanks to @lemire's simdutf pic.twitter.com/iFgI0Vv3sQ
在 bun build
中輸出 Source Map URL
為了告訴瀏覽器開發人員工具在哪裡可以找到 sourcemaps,工具會在檔案末尾插入 //# sourceMappingURL=
註解。
先前,Bun 沒有提供透過此註解連結到外部、非內聯 sourcemaps 的方法。
您現在可以使用 --sourcemap=linked
來告訴 Bun 在捆綁檔案的末尾插入 //# sourceMappingURL=
註解,以連結到外部 sourcemap。
bun build src/app.tsx --outdir ./dist --sourcemap=linked --minify
這將產生包含 app.js
和 app.js.map
的目錄 dist
,以及註解 //# sourceMappingURL=app.js.map
,以載入 sourcemap 進行偵錯。
感謝 @paperclover 實作此功能。
console.log
現在會印出陣列上的非索引屬性
Bun 現在會顯示陣列上的非索引屬性,例如
const arr = ['a', 'b', 'c'];
arr['five'] = 5;
console.log(arr);
bun non-indexed-properties.ts
[ "a", "b", "c", five: 5 ]
已修正:WebSocket 連線 error
事件現在包含 message
當 WebSocket 連線失敗時,error 事件現在包含一個 message
屬性,其中包含更詳細的錯誤訊息。
const ws = new WebSocket("ws://127.0.0.1:8080");
ws.addEventListener("error", (error) => {
console.log(error.message);
});
// The message previously only was in the "close" event:
ws.addEventListener("close", (close) => {
console.log(close);
});
這會印出以下錯誤訊息
WebSocket connection to 'ws://127.0.0.1:8080/' failed: Failed to connect
在連線失敗時,error
事件現在包含一個帶有錯誤訊息的 message
屬性,而不是僅在 close
事件中包含相關資訊。
已修正:使用 WebSocket 連線錯誤時 console.log 中的崩潰
當 WebSocket 無法連線時,它會發出 error
和 close
事件。
const ws = new WebSocket("ws://127.0.0.1:8080");
ws.addEventListener("error", (error) => {
// Connection error emitted
});
ws.addEventListener("close", () => {
// Connection did not fully open, but it is still closed
});
先前,從 WebSocket 連線錯誤印出 console.log(error)
有時會導致崩潰。程式碼錯誤地假設 ErrorEvent
始終包含非 null 的 error
。此問題已修正,並且我們的測試涵蓋範圍已得到改進,以涵蓋此邊緣情況。
已修正:在 Windows 上使用非 ascii cwd 時的 Bun Shell 和 bun run
感謝 @dylan-conway,已修正影響在具有非 ascii 字元的目錄中執行的 Bun Shell 和 bun run
的錯誤。
已修正:TypeScript 列舉中的非 ascii 字元
具有非 ascii 金鑰的列舉會損壞。此問題已修正。
enum X {
a,
b,
ç,
}
console.log(X);
已修正:在抽象屬性上使用實驗性裝飾器時的斷言失敗
感謝 @forcefieldsovereign,已修正在抽象屬性上使用實驗性 TypeScript 裝飾器時會發生的斷言失敗。
已修正:轉譯器中的 ZWJ 和 ZWNJ 字元
已修復當檔案的屬性名稱內包含 Zero Width Joiner (ZWJ) 或 Zero Width Non-Joiner (ZWNJ) 字元時會發生的崩潰。
已修正:module.mock
中的崩潰
感謝 @paperclover,已修復先前載入失敗的模組上使用 module.mock
的邊緣情況導致崩潰的問題。
已修正:process.execArgv
process.execArgv
可讓您傳回傳遞至 Bun 執行時期的引數,相較於 process.argv
中的程式引數。在某些情況下,錯誤地包含了非執行時期參數。感謝 @paperclover 修復此問題。
已修正:忽略不存在的可選依賴項
先前,由於可選依賴項依賴於從未發佈到 NPM 的套件,因此安裝套件 `@laihoe/demoparser2` 會失敗。Bun 現在透過簡單地忽略這些遺失的套件來符合 npm
的行為,因為它們被宣告為可選依賴項。
感謝 @dylan-conway
已修正:重新指派 module.exports
的 N-API 模組
已修復 Bun 不正確處理重新指派 module.exports
的 N-API 模組的錯誤。
先前,Bun 會忽略模組的回傳值,導致模組無法正確載入。此問題已修正,Bun 現在可以正確載入重新指派 module.exports
的 N-API 模組。當 module.exports
被指派給函數時,此問題最為明顯。
在此過程中,我們還修復了載入需要長時間初始化的 N-API 模組時可能發生的崩潰。
已修正:bun:sqlite
的 changes
欄位在 statement.run() 中始終為 0
預先編譯語句中的錯誤導致 db.prepare(...).run(...)
在某些情況下傳回 0,而不是語句中的變更次數。db.run(...)
不受影響。
已修正:工作區套件中的 bun patch
已修復與 bun patch --commit
差異化巢狀 node_modules
目錄中的檔案導致修補失敗相關的錯誤。
感謝 @zackradisic
內部:Bun 已將 Zig 更新至 0.13 版本
在 #9965 中,Bun 已升級為使用最新版本的 Zig 編譯器。這使得 Bun 更容易貢獻,因為它包含許多語言伺服器、建置系統和整體程式碼品質改進。
Zig 標準函式庫中的錯誤修復已修復 Bun 中的一些錯誤;最值得注意的是 Windows 修復程式,用於處理路徑和環境中的 WTF-16(UTF-16 的較寬鬆版本)。這修復了一些罕見的邊緣情況,在這些情況下,錯誤 InvalidUTF8
的報告內容很少。感謝 @squeek502。
對於團隊和貢獻者來說,一個重要的建置系統改進是能夠確保所有平台(Linux、Mac 和 Windows)都能成功編譯,而無需等待 CI 完成執行。貢獻者現在可以使用 Bun 儲存庫中的 bun run zig-check
測試編譯所有目標的程式碼。