Bun v1.1.8 版本在此!此版本修正了 54 個錯誤 (解決了 184 個 👍)。支援 process.on("uncaughtException")
和 process.on("unhandledRejection")
、JSON.parse
速度更快、node:zlib
中的 Brotli 支援、Bun API 中的 [Symbol.dispose]
、修正了 Windows 上大量的當機問題,以及許多其他的錯誤修正。
我們正在舊金山招聘系統工程師,共同打造 JavaScript 的未來!
先前的版本
v1.1.7
修正了 28 個錯誤 (解決了 11 個 👍)。bun install 中的 Glob 工作區名稱。expect.extends() equals 中的非對稱匹配器支援。bunx --version。JSX 轉譯、source map、獨立執行檔的跨平台編譯、bun shell、RegExp、Windows 上的 Worker 和 Node.js 相容性改進的錯誤修正。v1.1.6
修正了 10 個錯誤 (解決了 512 個 👍 反應)。我們實作了 UDP socket 支援和node:dgram
。DataDog 和 ClickHouseDB 現在可以運作了。我們修正了 v1.1.5 中node:http
的回歸問題。此外,還有 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
新功能:支援 process.on("uncaughtException")
和 process.on("unhandledRejection")
Bun 現在支援 process.on("uncaughtException")
和 process.on("unhandledRejection")
事件,讓您能夠以更優雅的方式處理未捕獲的例外和未處理的 Promise。
process.on("uncaughtException", (error) => {
console.error("Uncaught exception:", error);
});
process.nextTick(() => {
throw new Error("Oops!");
});
這也適用於未處理的 Promise,這對於處理非同步程式碼中的錯誤很有用。
process.on("unhandledRejection", (reason, promise) => {
console.error("Unhandled rejection:", reason);
});
await 42;
throw new Error("Oops!");
這應該可以解決各種 npm 套件 (例如 puppeteer
) 的問題,這些套件會在發生未處理的例外時清理資源。
感謝 @gvilums 新增此功能!
新功能:node:zlib
的 Brotli 支援
Bun 現在於 node:zlib
模組中實作 Brotli API,包括 BrotliCompress()
、BrotliDecompress()
、brotliCompress()
、brotliDecompress()
等等!
import { brotliCompressSync, brotliDecompressSync } from "node:zlib";
const compressed = brotliCompressSync("Hello, world!");
console.log(compressed.toString("hex"));
// => 0b068048656c6c6f2c20776f726c642103
const decompressed = brotliDecompressSync(compressed);
console.log(decompressed.toString("utf8"));
// => Hello, world!
您也可以將 Brotli streams 與 zlib
模組一起使用。
import { createBrotliCompress } from "node:zlib";
const compressor = createBrotliCompress();
compressor.write("Hello, world!");
compressor.end();
const compressed = compressor.read();
console.log(compressed.toString("hex"));
// => 0b068048656c6c6f2c20776f726c642103
修正了 axios
的回歸問題
新增 Brotli 支援也修正了 axios
的回歸問題,因此它現在應該可以在 Bun 中再次運作。
感謝 @nektro 新增此功能!
新功能:Bun API 中支援 [Symbol.dispose]
Bun 現在於各種 API 上支援 [Symbol.dispose]
屬性,包括 Bun.spawn
、Bun.serve
、Bun.connect
和 Bun.listen
。這讓您可以使用 using
語法定義變數,該語法由 TC39 關於 JavaScript 中顯式資源管理的提案所定義。
import { serve } from "bun";
{
using server = serve({
port: 0,
fetch(request) {
return new Response("Hello, world!");
},
});
doStuff(server);
}
function doStuff(server) {
// ...
}
在此範例中,即使拋出例外,server
變數超出範圍時,伺服器也會自動關閉。這對於確保資源被正確清理非常有用,尤其是在測試中。
import { spawn } from "bun";
import { test, expect } from "bun:test";
test("able to spawn a process", async () => {
using subprocess = spawn({
cmd: [process.execPath, "-e", "console.log('Hello, world!')"],
stdout: "pipe",
});
const stdout = new Response(subprocess.stdout).text();
expect(stdout).resolves.toBe("Hello, world!");
});
感謝 @paperclover 實作此功能!
更快速:JSON.parse
在 Bun 和 Safari 的下一個版本中
— Bun (@bunjavascript) 2024年5月10日
• JSON.parse(object) 速度提升 6%
• JSON.parse(long string) 速度提升 200% - 400%
感謝 @Constellation! pic.twitter.com/uvBJUl8gOs
已修正:Windows 上的 Illegal instruction
錯誤
我們修正了 Bun 的建置腳本中的一個錯誤,該錯誤導致 Windows 相依性是以錯誤的 CPU 旗標建置的。這導致在 Windows 上使用較舊的 CPU 時出現 Illegal instruction
錯誤。
@paperclover_dev 的 6 行 PR 修正了 Windows 使用者回報 80 次的當機問題 pic.twitter.com/DmuHAgyd2j
— Bun (@bunjavascript) 2024年5月7日
此錯誤解決了超過 18 個 GitHub issue,並且歸功於 Bun 全新的當機回報器而被發現。
已修正:使用 %i
格式字串的 console.log
造成的當機
我們修正了一個錯誤,其中 console.log
可能會在使用超出引數數量的 %i
格式字串時當機。
console.log("Hello %i %i", [1, 2, 3, 4]);
// Before: <panic>
// Now: 'Hello NaN %i'
感謝 @paperclover 修正此錯誤!
已修正:多個 workspace dependency not found
錯誤
我們修正了各種會導致 bun install
失敗並出現 workspace dependency not found
錯誤的問題。
第一個錯誤是由於將新的工作區相依性新增至未在其
package.json
中定義version
屬性的工作區所造成的。第二個錯誤是由於手動將工作區相依性新增至工作區
package.json
中的packages
屬性,然後嘗試執行bun install
所造成的。
我們仍在努力改進 Bun 中的工作區。如果您仍然遇到工作區問題,請提交 issue。
已修正:重複呼叫 console.table
造成的當機
我們修正了一個錯誤,其中 console.table
使用的字串參考計數被錯誤地計算,這可能會導致當機。
for (let i = 0; i < 50; i++) {
console.table([{ n: 8 }]);
}
感謝 @dylan-conway 修正此錯誤!
已修正:搭配檔案描述符和偏移量的 createReadStream
錯誤
我們修正了一個錯誤,其中將 createReadStream
與檔案描述符和起始偏移量一起使用會導致偏移量被忽略。
import { openSync, createReadStream, writeSync } from "node:fs";
const fd = openSync("hello.txt", "w+");
const stream = createReadStream("", { fd: fd, start: 2 });
stream.on("data", (chunk) => {
// Before: "Hello, world!"
// Now: "llo, world!"
});
writeSync(fd, "Hello, world!");
感謝 @gvilums 修正此錯誤!
已修正:confirm()
在 Windows 上無法運作
Bun 實作了 confirm()
Web API,它會提示終端機顯示確認訊息。我們沒有正確處理 Windows 行尾符號,因此確認永遠不會是 true
。
if (confirm("Are you sure?")) {
console.log("Yes!");
} else {
console.log("No!");
}
這已由 @rcaselles 修正。
已修正:某些 CPU 的 os.cpus()
錯誤
我們修正了一個錯誤,其中當 CPU 字串太長時,os.cpus()
會拋出錯誤。
import { cpus } from "node:os";
console.log(cpus());
// Before: <error: Failed to get cpu information>
// Now: [ { model: "Intel(R) Core(TM) i7-10875H CPU @ 2.30GHz", ... } ]
這已由 @dylan-conway 修正。
已修正:ClientRequest
上缺少 agent
屬性
我們修正了一個錯誤,其中 ClientRequest
類別上缺少 agent
屬性。
import { request } from "node:http";
const req = request("https://example.com");
console.log(req.agent);
// Before: undefined
// Now: <Agent>
感謝 @nektro 修正此錯誤!
已修正:將 stdout 從 Bun.spawn()
重新導向至 Bun.serve()
無法運作
有一個錯誤,其中將 stdout 從 Bun.spawn()
重新導向至 Bun.serve()
無法運作。此問題現已修正。
import { spawn, serve } from "bun";
const server = serve({
port: 0,
async fetch(req) {
const { stdout } = spawn({
cmd: [process.execPath, "-e", 'console.write("Hello, world!")'],
stdout: "pipe",
});
return new Response(stdout);
},
});
const response = await fetch(server.url);
console.write(await response.text());
server.stop(true);
已修正:node:net
中 onread
無法運作
我們在 node:net
模組中新增了對 onread
事件的支援,讓您可以監聽 socket 上的傳入資料。
import { connect } from "node:net";
const socket = connect({
host: "example.com",
port: 80,
onread: {
buffer: Buffer.alloc(1024),
callback(size, buffer) {
console.log("onread:", size);
},
},
});
socket.write("GET / HTTP/1.1\r\n\r\n");
// Before: <nothing>
// Now: onread: 504
感謝 @gvilums 修正此錯誤!
已修正:InlineCacheCompiler 中的當機
已修正一個當機問題,該問題可能在函數以特定方式被存取,並在活動幾分鐘後被垃圾回收時發生。此當機問題是 JavaScriptCore 引擎中的上游問題,始於 Bun v1.1.7,現已解決。有些使用者回報在使用 Next.js 時發生此當機問題。
已修正:node:inspector
的更佳 Stub
Bun 不支援 node:inspector
模組,因為它依賴 Chrome DevTools 協定,該協定與 WebKit 的協定類似但不相同。
先前,當嘗試使用 inspector.url()
時,Bun 會拋出未實作錯誤。現在,我們已將其變更為傳回 undefined
,這是根據Node.js 文件所允許的行為。
某些 npm 套件 (例如 typedoc
) 使用此 API 進行功能偵測。透過這些變更,這些套件現在可以與 Bun 搭配使用。
import { url } from "node:inspector";
// ...
const isDebugging = () => !!url();
感謝 @Electroid 使其變得更好!