Bun v1.1.18 隆重登場!此版本修正了 55 個錯誤(解決了 493 個 👍)。支援 npmrc。改進了常數折疊與列舉內聯。改進了 functions 的 console.log 輸出。修正了在工作區中修補依賴項的問題。修正了在連結二進制檔案時 bun install
中的多個錯誤。修正了 dns.lookup
中的崩潰,並標準化 DNS 錯誤以更好地匹配 Node。修正了 Bun.escapeHTML
中的斷言失敗。升級了 JavaScriptCore。
我們正在舊金山招聘系統工程師,以共創 JavaScript 的未來!
先前的版本
v1.1.17
修正了 4 個錯誤。修正了 bun repl 中的崩潰。使 macOS 上小型目錄中的 fs.readdirSync 速度提升 5%。修正了 “ws” 模組在 “send” 方法中未調用回調的問題。修正了在 bun install 中讀取損壞的 lockfile 時發生的崩潰。使 macOS 事件循環稍微加快。v1.1.16
修正了 41 個錯誤(解決了 221 個 👍)。bun test 中的 lcov 程式碼覆蓋率報告,從私有 git 倉庫(包括 Gitlab 和 Bitbucket)安裝依賴項。Buffer.from(string, "base64")
在大型輸入上速度提升 6 倍 - 30 倍。修復了bun patch
、bun install
、N-API addons 的錯誤,transpiler 的錯誤修復以及 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
.npmrc 支援
Bun v1.1.18 新增了讀取 .npmrc
檔案的支援,使 bun install
能夠使用您現有的 npm 登錄檔配置,包括私有登錄檔和作用域套件。
; .npmrc
@my-company-scope:registry=https://packages.my-company.com
bun install
也支援從 package-lock.json
遷移現有的套件版本。
結合 `.npmrc`,您現在可以輕鬆地在公司測試 bun install
,而無需更改設定檔。或者您可以偷偷試用 Bun 而不被同事注意到(除了,也許安裝之間喝咖啡的時間變少了)。
enum
內聯
Bun 的最佳化轉譯器現在支援內聯 TypeScript enum
值,這在某些情況下可以提高效能。例如
const enum Version {
major = 1,
minor = 1,
patch = 18,
pretty = `${major}.${minor}.${patch}`,
}
console.log("Bun v" + Version.pretty);
現在轉譯為
console.log("Bun v1.1.18");
先前,這會轉譯為
var Version;
(function (Version2) {
Version2[(Version2["major"] = 1)] = "major";
Version2[(Version2["minor"] = 1)] = "minor";
Version2[(Version2["patch"] = 18)] = "patch";
Version2[
(Version2[
"pretty"
] = `${Version2.major}.${Version2.minor}.${Version2.patch}`)
] = "pretty";
})(Version || (Version = {}));
console.log("Bun v" + Version.pretty);
此行為在 Bun 的運行時環境中預設啟用,並且在啟用 `--minify-syntax` 時在 bun build
中也啟用。
當使用帶有長字串的 const enum
時請小心,因為這可能會增加您轉譯後的程式碼大小。
感謝 @paperclover 的這項最佳化!
常數折疊改進
此版本新增了在 Bun 的最佳化轉譯器中,預先對靜態已知值執行常數折疊位元運算的支援。
這適用於數字
- console.log(1 << 3);
+ console.log(8);
- console.log(1 | 3);
+ console.log(3);
- console.log(1 ^ 3);
+ console.log(2);
- console.log(1 >> 3);
+ console.log(0);
- console.log((1 + 1) ^ 2);
+ console.log(0);
- console.log(0xFF & 0x50);
+ console.log(80);
這也適用於字串
- console.log("hello " + 25);
+ console.log("hello 25");
在內部,我們重複使用 JavaScriptCore 的一些程式碼,以確保它與 JavaScript 引擎的行為一致。
Bun 的運行時環境、bun build
、bun test
、Bun.build
和 Bun.Transpiler
都支援此行為。
感謝 @paperclover 的這項最佳化!
TypeScript 命名空間合併
在 TypeScript 中,重複的同級 namespace
宣告會合併為單一共享宣告。Bun 現在支援此行為,其語義與 TypeScript 的編譯器 (tsc) 相同
以下輸入
namespace A {
export const a = 1;
}
namespace A {
export const b = a + 1;
}
console.log(A.a, A.b);
現在求值為預期輸出
bun run in.ts
1 2
先前,這會出錯
1 | namespace A {
2 | export const a = 1;
3 | }
4 |
5 | namespace A {
6 | export const b = a + 1;
^
ReferenceError: Can't find variable: a
at in.ts:6:20
at in.ts:6:24
Bun 的運行時環境、bun build
、bun test
、Bun.build
和 Bun.Transpiler
都支援此行為。
感謝 @paperclover 修復了這個問題!
改進了 functions 的 console.log 輸出
Bun 現在將會 console.log 函數物件類型。例如
function a() {}
async function b() {}
function* c() {}
async function* d() {}
console.log(a, b, c, d);
現在將輸出
[Function: a] [AsyncFunction: b] [GeneratorFunction: c] [AsyncGeneratorFunction: d]
感謝 @erik-dunteman 的這項改進!
已修正:Bun.escapeHTML
中的斷言失敗
當使用啟用 SIMD 的 latin1 編碼輸入進行跳脫字元處理時,Bun 由於在更新緩衝區的長度值之前寫入緩衝區而導致斷言失敗(不是緩衝區溢位,因為記憶體在此時已分配)。
已修正:bun install
二進制檔案連結順序
為了確保安裝是確定性的,Bun 現在將按字母順序連結二進制檔案,如果目的地已存在,則跳過連結二進制檔案。
已修正:bun install
後缺少或錯誤的二進制檔案
當 package node_modules 中有多個副本時,Bun 僅連結了套件的第一個已安裝副本的二進制檔案。現在 Bun 將連結所有副本的二進制檔案,防止使用錯誤的二進制檔案,或可能根本找不到二進制檔案。
已修正:在 bun install
期間標準化 shebang 行尾
Bun 現在將標準化 shebang 行尾,使二進制檔案無論使用 CRLF 或 LF 行尾都能正常工作。
已修正:bun pm trust
中的斷言失敗
當在 node_modules 中對父套件已受信任的套件執行 bun pm trust
時,會發生斷言失敗。感謝 @dylan-conway 修復了此問題
已修正:bun install
中 “overrides” 的崩潰
給定以下 package.json
{
"dependencies": {
"is-even": "1.0.0"
},
"overrides": {
"is-odd": "https://my-registry.com/is-odd/-/is-odd-1.2.3.tgz"
}
}
應該安裝來自 `my-registry.com` 的 `is-odd@1.2.3`,因為 `is-even@1.0.0` 依賴於 `is-odd`。先前,Bun 在嘗試安裝此覆寫時會崩潰,因為它預期覆寫不是 tarball URL。感謝 @dylan-conway 修復了此問題。
已修正:Windows 上 bun test
目錄開啟權限
在 Windows 上搜尋要測試的檔案時,Bun 使用 `DELETE` 存取遮罩開啟目錄,這可能會導致產生的進程無法變更其工作目錄。
已修正 `dns.lookup` 中的崩潰
已修復當給定格式錯誤的主機名稱時 `dns.lookup` 中的崩潰,並新增了改進的 DNS 錯誤訊息,以更好地匹配 node。
const dns = require("dns");
dns.lookup(".", (err) => {
console.log(err.name); // `DNSException`, previously `Error`
console.log(err.errno); // `4`, previously `undefined`
});
bun patch
在工作區中的錯誤修復
修復了一個錯誤,其中 `bun patch <package>` 無法在工作區中找到要修補的依賴項。當依賴項被提升到不同的位置時,就會發生這種情況。
感謝 @zackradisic 修復了此問題!
JavaScriptCore 升級
我們已升級到最新版本的 JavaScriptCore,其中修復了擴展語法語義 (`{... object }`)、x64 上的 WebAssembly 評估以及 RegExp 和異常處理中罕見崩潰的錯誤。