Bun
    Bun

Bun v1.0.5


Ashcon Partovi · 2023 年 10 月 11 日

Bun v1.0.5 修復了 41 個錯誤(解決了 248 個 👍 反應),包括 fetch() 中的記憶體洩漏,在 crypto 模組中新增了 KeyObject 支援,bun install 可以匯入 package-lock.json 檔案,並安裝 peer dependencies。我們還新增了 bun pm migrate 子命令,以及更多錯誤修復。

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 支援,修復了私有 registry 以及更多問題
  • v1.0.4 - server.requestIP、執行階段外掛程式中的虛擬模組以及更多

安裝 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

修復了 fetch() 的記憶體洩漏

我們修復了 Bun 中 gzip/delate 編碼的回應未正確關閉而導致的記憶體洩漏。這使 fetch() 使用更少的記憶體且更可靠。

此修復還降低了 fetch() 的整體記憶體消耗。

node:crypto 模組中的 KeyObject 支援

感謝 @cirospaciari,Bun 現在支援 crypto 模組中的 KeyObject 類別。此類別用於表示公鑰和私鑰,並被各種加密套件使用,這些套件現在可以運作,包括

這是因為 Bun 現在實作了以下 crypto API

bun:test 中的 expect().toEqualIgnoringWhitespace

感謝 @EladBezalelbun:test 獲得了一個新的測試匹配器:toEqualIgnoringWhitespace

import { expect, test } from "bun:test";

test("it works", () => {
  expect("  hello  ").toEqualIgnoringWhitespace("hello");
});

bun run --if-present 旗標

bun run 現在有一個 --if-present 旗標,它僅在腳本存在時執行腳本。這對於在許多不同的資料夾(例如工作區)中執行相同的腳本很有用。

bun run --if-present my-script
# runs "my-script" if it exists in package.json "scripts"

感謝 @Electroid 實作此功能。

package-lock.json 匯入 dependencies

如果 Bun 未偵測到 bun.lockb 檔案,則如果存在 package-lock.jsonbun install 現在將自動從 package-lock.json 匯入 dependencies。這使得從 npm 遷移到 bun 更加容易。這樣可以保留 package-lock.json 中的相同 dependency 版本。

感謝 @paperclover 實作此功能。

bun pm migrate 子命令

bun v1.0.5 引入了一個新的 bun pm migrate 子命令。

若要使用它,請在與您的 package-lock.json 檔案相同的目錄中執行以下命令

bun pm migrate

此子命令將 npm package-lock.json 檔案轉換為 bun.lockb 檔案,同時保留 package-lock.json 中的相同 dependency 版本。

您通常不必執行此命令,因為如果 bun install 偵測到 package-lock.json 檔案但沒有 bun.lockb 檔案,它將自動執行此命令,但如果您想在不執行 bun install 的情況下從 npm 遷移到 bun,這會很有用。

安裝 peer dependencies

bun install 現在預設會自動安裝未滿足的 peer dependencies。這表示如果您安裝了一個具有 peer dependencies 的套件,如果這些 peer dependencies 尚未存在,Bun 將自動安裝它們。這使 bun install 的行為與 npm installpnpm install 一致。

如果您不想要此行為,可以將 --no-peer 旗標傳遞給 bun install 來停用它。

您也可以將以下內容新增至您的 bunfig.toml 檔案,以預設停用此行為

# Disable installing peer dependencies
install.peer = false

感謝 @dylan-conway 實作此功能。

什麼是 peer dependencies?

Peer dependencies 是套件所需的 dependencies,但最好由使用者安裝。

例如,如果您在沒有 react 的情況下安裝 react-router-dom,它可能無法運作。react-router-domreact 作為 peer dependency,這表示它需要安裝 react,但最好由使用者自行安裝 react,以便您可以更好地控制安裝的 react 版本。這是一種套件表示「我需要這個函式庫才能運作,但它應該使用您的 dependency 版本,而不是我的版本」的方式。

先前,Bun 不會安裝 peer dependencies,這表示您必須自己安裝它們。這導致套件無法直接運作的問題,而且您必須手動安裝 peer dependencies。現在,Bun 將自動為您安裝 peer dependencies。

"trustedDependencies" lifecycle scripts 錯誤修復

一個錯誤導致來自 "trustedDependencies" 的 lifecycle scripts 在 bun install 上未重新執行。此問題已修復,[感謝 @Arden144](https://github.com/oven-sh/bun/issues/5472)。

已修復 bun install 錯誤

我們一直努力修復 bun install 中的錯誤。以下是我們修復的一些錯誤

  • #6258 - 修復了 workspace dependencies 無法解析的問題。
  • #4066 - 修復了 ConnectionRefused 錯誤或 bun install 耗時過長的情況。
  • 更支援 git dependencies,包括 git@<url>bitbucket:<url>
  • #6219 - bun install 中的微優化,以開啟更少的文件描述符。
  • 修復了一個預發佈版本會導致解析錯誤版本的錯誤。

其他變更和修復

  • #6207 - process.kill() 現在傳回布林值,以符合 Node.js。(感謝 @Hanaasagi!)
  • #6042 - bunx 現在適用於 Github 套件,例如 bunx github:piuccio/cowsay(感謝 @axlEscalada!)
  • #6259 - Blob.slice 正確設定偏移量(感謝 @Hanaasagi!)
  • #6074 - 現在支援 TextEncoder.ignoreBOM(感謝 @WingLim!)
  • bun install 現在將相對工作區路徑持久儲存在 bun.lockb 檔案中。
  • bun install 現在將 trustedDependencies 持久儲存在 bun.lockb 檔案中。
  • node:url 中的 query 屬性現在是一個物件,而不是 URLSearchParams 實例,與 Node.js 行為一致
  • 感謝 @liz3process.exit 中的退出代碼現在可以 > 127。
  • 感謝 @kitsuned,已修復 node:buffer 中錯誤地需要位置引數的錯誤。

新的貢獻者

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

  • @mathiasrw 在 #6255 中做出了他們的首次貢獻
  • @wbjohn 在 #6256 中做出了他們的首次貢獻
  • @jsparkdev 在 #6222 中做出了他們的首次貢獻
  • @kitsuned 在 #4911 中做出了他們的首次貢獻
  • @Pandapip1 在 #6298 中做出了他們的首次貢獻
  • @panva 在 #6294 中做出了他們的首次貢獻
  • @2hu12 在 #6379 中做出了他們的首次貢獻
  • @Cadienvan 在 #6331 中做出了他們的首次貢獻
  • @Longju000 在 #6291 中做出了他們的首次貢獻
  • @babarkhuroo 在 #6314 中做出了他們的首次貢獻
  • @otterDeveloper 在 #6359 中做出了他們的首次貢獻
  • @RaresAil 在 #6400 中做出了他們的首次貢獻
  • @yukulele 在 #6399 中做出了他們的首次貢獻
  • @vthemelis 在 #6307 中做出了他們的首次貢獻
  • @EladBezalel 在 #6293 中做出了他們的首次貢獻
  • @Arden144 在 #6376 中做出了他們的首次貢獻

若要查看完整的變更清單,請查看 Bun 變更日誌