Bun

Bun v1.0.7


Jarred Sumner · 2023 年 10 月 20 日

Bun v1.0.7 修復了 59 個錯誤(解決了 78 個 👍 反應),在 bun install 中實作了可選的同層級相依性,並改進了 Node.js 的相容性。

Bun 是一個速度極快的 JavaScript 執行環境、打包器、轉譯器和套件管理器 — 功能All in one。如果您錯過了,這裡列出 Bun 最近的一些變更

  • v1.0.0 - 首個穩定版本!
  • v1.0.1 - 為 .json 和 .toml 檔案命名匯入,修復了 bun installnode:pathBuffer
  • v1.0.2 - 讓 --watch 更快,以及大量的錯誤修復
  • v1.0.3 - emitDecoratorMetadata 和 Nest.js 支援,修復了私有註冊表等等
  • v1.0.4 - server.requestIP、執行階段外掛程式中的虛擬模組等等
  • v1.0.5 - 修復了 fetch() 的記憶體洩漏、node:crypto 模組中的 KeyObject 支援、bun:test 中的 expect().toEqualIgnoringWhitespace 等等
  • v1.0.6 - 修復了 3 個錯誤(解決了 85 個 👍 反應),在 package.json 中實作了 overridesresolutions,並修復了影響 Bun 的 Docker 使用回歸問題

安裝 Bun

curl
npm
brew
docker
curl
curl -fsSL https://bun.dev.org.tw/install | bash
npm
npm install -g bun
brew
brew tap oven-sh/bun
brew install bun
docker
docker pull oven/bun
docker run --rm --init --ulimit memlock=-1:-1 oven/bun

升級 Bun

bun upgrade

bun install 的改進

此版本包含對 bun install 的多項錯誤修復,例如

新功能:可選的 peerDependencies

此版本新增了對可選同層級相依性的支援,解決了 bun install 可能會安裝比 npm install 更多套件的錯誤。

可選的同層級相依性在 package.json 中看起來像這樣

package.json
{
  "peerDependencies": {
    "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0"
  },
  "peerDependenciesMeta": {
    "node-notifier": {
      "optional": true
    }
  }
}

這告訴 npm 客戶端不要安裝 node-notifier,除非它明確列在根專案的 package.jsondependenciesdevDependencies 中。

在先前的版本中,即使 node-notifier 未列在根專案的 package.json 中,Bun 也會安裝它。這會增加 node_modules 的大小,並可能導致 Bun 在多個版本下安裝相同套件的問題。在 Bun v1.0.7 中,此問題已修復。

感謝 @dylan-conway 在 Bun 中實作可選的同層級相依性!

已修復:安裝了錯誤版本套件的邊緣案例

存在一個錯誤,當比對 semver 範圍時,bun install 有時會選擇較舊版本的套件。此問題已修復,感謝 @dylang

具體來說,我們假設 npm 註冊表 API 以 semver 順序傳回套件版本列表。官方註冊表 API *通常* 這樣做,但並非總是如此。此外,並非所有人都使用官方註冊表 API。這導致 bun install 有時會選擇仍然符合 semver 範圍的較舊版本套件。

Bun 現在將對從註冊表檢索的版本進行排序,然後再選擇最符合的版本。

已修復:bun install github:foo/foo 可能會多次儲存到 package.json

一個錯誤導致 bun install github:foo/foo 多次儲存到 package.json。如果您執行兩次,相依性將在 package.json 中出現多次。此錯誤已修復,感謝 @dylan-conway

已修復:在 Linux 上導致非決定性 bun.lockb 的邊緣案例

決定性問題導致 bun.lockb 在 Linux 上有時會包含不同的內容。此問題已修復,感謝 @dylan-conway

已修復:npm 別名邊緣案例錯誤修復

已修復一個錯誤,該錯誤導致相依性中的 npm:` 別名並非總是受到尊重,感謝 @dylan-conway

Node.js 相容性改進

此版本還包含多項 Node.js 相容性改進。

已修復:child_process IPC 可靠性

已修復一個可靠性問題,該問題導致 IPC 訊息無法傳送所有內容,感謝 @paperclover。這有助於 Next.js 在 Bun 中更可靠地運作,儘管仍有更多工作要做。

已修復:沒有 end 事件的掛起 socket

已修復一個錯誤,該錯誤導致 node:net socket 在所有情況下都無法正確發出 end 事件,感謝 @cirospaciari

此錯誤影響了 pgsequelize 套件以及其他套件。

已修復:napi 記憶體洩漏

已修復 napi 中的記憶體洩漏,感謝 @alangecker。根本原因是參考計數從 1 而不是 0 開始。

已修復:node:stream 崩潰

已修復當將許多小塊寫入 node:stream 時可能發生的崩潰,感謝 @paperclover

已修復:Unix socket 的 server.address()

已修復一個錯誤,該錯誤導致 node:http 中的 server.address() 為 unix socket 傳回不正確的值,感謝 @Hanaasagi

已修復:threadIdWorker 中未設定

已修復一個錯誤,該錯誤導致 threadId 未在 node:worker_threads 中傳回的 Worker 實例中設定,感謝 @jerome-benoit

已修復:使用 'binary' 的 Buffer.write 截斷為 ascii 而不是 latin1

已修復一個錯誤,該錯誤導致使用 'binary' 編碼的 Buffer.write 截斷為 ascii 而不是 latin1,感謝 @Electroid

已修復:Buffer.concat(buffers, undefined) 拋出錯誤

以下程式碼會拋出錯誤的錯誤已修復,感謝 @Hanaasagi

Buffer.concat([Buffer(1), Buffer(1)], undefined);

以下程式碼不會拋出錯誤

Buffer.concat([Buffer(1), Buffer(1)]);
Buffer.concat([Buffer(1), Buffer(1)], 2);

此錯誤正在檢查本機程式碼中與 arguments.length 等效的內容,而不是 arguments[1] 是否為 undefined

已修復:node:dns lookup 為 family 傳回錯誤的位址

已修復一個錯誤,該錯誤導致當設定 family 時,node:dnslookup 函數傳回錯誤的位址類型,感謝 @Electroid。例如,dns.lookup('localhost', { family: 6 }) 可能會傳回 IPv4 位址而不是 IPv6 位址。

執行階段修復

我們還修復了 Bun 執行階段中的幾個錯誤。

已修復:導致 docker 容器拋出不正確「port in use」錯誤的錯誤

已修復一個錯誤,該錯誤導致 Bun 在 Docker 容器中執行時拋出不正確的「port in use」錯誤,感謝 @Hanaasagi

當繫結到 IPv6 位址失敗時,Bun 會立即傳回錯誤。現在,它也會嘗試繫結到 IPv4 位址,並且僅在也失敗時才傳回錯誤。這是因為 長期存在的問題,即使停用了 IPv6,Docker 仍會在 `/etc/hosts` 中包含 IPv6 項目。

已修復:request.url 有時會有不正確的 port

已修復一個導致 request.url 有時具有不正確 port 的邊緣案例,感謝 @Electroid

已修復:Response 中缺少 statusText

已修復一個導致 response.statusText 遺失的錯誤,感謝 @toshok

已修復:WebSocket 客戶端 Host 標頭缺少 port

已修復一個錯誤,其中 WebSocket 客戶端傳送的 Host 標頭中未包含 port 號碼,感謝 @Electroid

已修復:Bun.write 在錯誤訊息中報告了錯誤的路徑

已修復一個錯誤,該錯誤導致 Bun.write 在錯誤訊息中報告錯誤的路徑,感謝 @Hanaasagi

已修復:SQLite 中的 statement.all() 有時傳回數字而不是陣列

在某些情況下,bun:sqlitestatement.all() 函數傳回數字而不是陣列。這非常令人困惑,並且已修復為始終傳回陣列,感謝 @HForGames

已修復:describe.only 不適用於巢狀 describe 範圍

已修復 bun:test 中的一個錯誤,該錯誤導致 describe.only 不適用於巢狀 describe 範圍,感謝 @igorshapiro

為定期 Windows 建置做準備

我們正在對我們的建置系統進行變更,以為定期 Windows 建置做準備。

Bun 即將切換為使用 cmakeninja 進行建置,而不是 2000 多行的 Makefile。Bun 也將開始使用 JavaScriptCore 的偵錯版本,這啟用了各種斷言,可協助我們更早發現錯誤。此版本實作了大部分必要的變更,感謝 @paperclover

Bun 也將在下一個版本中從 LLVM 16 升級到 LLVM 17。

新貢獻者

感謝我們的 17 位新貢獻者 🎉