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 install
、node:path
和Buffer
v1.0.2
- 加快--watch
速度以及大量錯誤修復v1.0.3
-emitDecoratorMetadata
和 Nest.js 支援,修復了私有 registry 以及更多問題v1.0.4
-server.requestIP
、執行階段外掛程式中的虛擬模組以及更多
安裝 Bun
curl -fsSL https://bun.dev.org.tw/install | bash
npm install -g 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
修復了 fetch()
的記憶體洩漏
我們修復了 Bun 中 因 gzip/delate 編碼的回應未正確關閉而導致的記憶體洩漏。這使 fetch()
使用更少的記憶體且更可靠。
在 Bun 的下一個版本中
— Jarred Sumner (@jarredsumner) 2023 年 10 月 7 日
已修復影響 fetch() 的記憶體洩漏
左:bun v1.0.4
右:bun v1.0.5 pic.twitter.com/x3dNkPTh5O
此修復還降低了 fetch()
的整體記憶體消耗。
node:crypto
模組中的 KeyObject
支援
感謝 @cirospaciari,Bun 現在支援 crypto
模組中的 KeyObject
類別。此類別用於表示公鑰和私鑰,並被各種加密套件使用,這些套件現在可以運作,包括
這是因為 Bun 現在實作了以下 crypto API
KeyObject
crypto.createSecretKey()
crypto.createPublicKey()
crypto.createPrivateKey()
crypto.generateKeyPairSync()
crypto.generateKeySync()
crypto.generateKeyPair()
crypto.generateKey()
crypto.sign()
crypto.verify()
bun:test
中的 expect().toEqualIgnoringWhitespace
感謝 @EladBezalel,bun: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.json
,bun 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 install
和 pnpm 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-dom
將 react
作為 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 行為一致- 感謝 @liz3,
process.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 變更日誌。