前言
Bun 可以用在 JavaScript 和 TypeScript 專案的開發、測試、執行和打包。Bun 是多合一 JavaScript 執行環境和工具包,同時也是 Node.js 相容的套件管理工具。
認識執行時期
JavaScript(或更正式地稱為 ECMAScript)是一種程式語言的規範。任何人都可以開發 JavaScript 引擎,用於讀取並執行有效的 JavaScript 程式。目前最廣泛使用的兩個引擎是 V8(由 Google 開發)和 JavaScriptCore(由 Apple 開發),兩者均為開源。
大多數 JavaScript 程式並非在孤立環境中執行。它們需要存取外部世界的方法,才能執行實際有用的任務。這正是執行時期發揮作用的地方。執行時期實作了額外的 API,並將其提供給執行的 JavaScript 程式使用。
瀏覽器
值得注意的是,瀏覽器內建 JavaScript 執行時期,並透過全域的 window
物件公開一組特定於 Web 的 API。瀏覽器執行的任何 JavaScript 程式碼都可以利用這些 API,在當前網頁的背景下實現互動式或動態行為。
Node.js
同樣地,Node.js 是一種 JavaScript 執行時期,用於非瀏覽器環境,例如伺服器。由 Node.js 執行的 JavaScript 程式可以存取一組特定於 Node.js 的全域變數,例如 Buffer
、process
和 __dirname
,以及內建模組,用於執行作業系統層級的任務,例如讀取/寫入檔案(node:fs
)和處理網路(node:net
、node:http
)。此外,Node.js 還實作了一個基於 CommonJS 的模組系統和解析演算法,這一系統早於 JavaScript 的原生模組系統。
安裝
使用以下指令安裝 Bun 執行檔。
1 | curl -fsSL https://bun.dev.org.tw/install | bash |
範本
建立一個空的 Bun 專案架構。
1 | mkdir bun-example |
執行時期
Bun 在幕後使用 JavaScriptCore 引擎,此引擎是由 Apple 為 Safari 開發。在多數情況下,啟動和執行效能都比 V8 快,而 V8 是 Node.js 和基於 Chromium 的瀏覽器所使用的引擎。它的轉譯器和執行時間是用 Zig 編寫的,Zig 是一種現代且高效能的語言。在 Linux 上,這轉化為比 Node.js 快 4 倍的啟動時間。
執行檔案
使用 bun run
指令來執行來源檔案。
1 | bun run index.js |
Bun 開箱即支援 TypeScript 和 JSX。
1 | bun run index.js |
在監聽模式下執行檔案,使用 --watch
標記。
1 | bun --watch run index.tsx |
執行 package.json
指令碼
在 package.json
定義多個對應於 shell 指令的命名。
1 | { |
使用 bun run <script>
指令來執行指令碼。
1 | bun run clean |
檔案類型
Bun 原生支援 TypeScript。在執行所有檔案之前,Bun 的快速原生轉譯器會即時轉譯。
JSX
Bun 原生支援 .jsx
和 .tsx
檔案。Bun 的內部轉譯器會在執行之前將 JSX 語法轉換為純 JavaScript。
1 | bun index.js |
文字檔
文字檔可以當作字串匯入。
1 | import text from "./text.txt"; |
JSON
JSON 和 TOML 檔可以直接從來源檔匯入。內容將會載入並以 JavaScript 物件回傳。
1 | import pkg from "./package.json"; |