Astra,一款將 JavaScript 應用程式轉換為獨立可執行檔案的新工具,在開發者社群引發了關於術語和 JavaScript 打包解決方案技術方法的熱烈討論。這款將 JavaScript 和 TypeScript 程式碼轉換為 Windows 可執行檔案的工具,因其使用 Node.js 單一可執行應用程式(SEA)的現代方法而受到關注。
編譯器爭議
圍繞 Astra 最激烈的討論之一涉及其自我描述為編譯器。一些開發者對這一術語提出異議,認為 Astra 並不執行傳統編譯任務,如解析、暫存器分配或連結等定義真正編譯器的功能。
「這不是一個編譯器。它沒有進行程式翻譯。沒有暫存器分配。沒有解析。沒有連結。它與編譯器完全不同。」
Astra 的建立者 QwertyCodeQC 承認了這種技術上的區別,但為術語選擇辯護,認為這對普通 JavaScript 開發者更容易理解,他們將編譯器與將原始碼轉換為單一二進位制檔案聯絡起來。一些社群成員建議使用打包器(bundler)、封裝器(packager)或 js-to-exe 工具等替代術語可能更準確地描述 Astra 的功能。
技術方法和差異化
Astra 與類似工具如 pkg 或 nexe 的區別在於它使用 Node.js 官方的單一可執行應用程式(SEA)功能。雖然較舊的工具僅支援傳統 Node.js 版本(約 v14),但 Astra 透過利用這一官方支援的功能,可以與最新版本一起工作。
工作流程很直接:程式碼透過 esbuild 打包,轉換為注入到 Node.js 二進位制檔案中的 blob,新增元資料(包括圖示和版權資訊),最後,使用 postject 工具將 blob 注入到可執行檔案中。這種方法使 Astra 能夠支援現代 ECMAScript 功能,包括在其他解決方案中存在問題的 ESM 匯入。
Astra 特性
- 使用 esbuild 進行打包和快速構建
- 利用 Node.js 單一可執行應用程式(SEA)技術
- 支援 ECMAScript 模組(ESM)
- 生成包含所有依賴項的獨立 .exe 檔案
- 允許自定義可執行檔案元資料(圖示、名稱、版本)
- 內建壓縮功能
- 目前僅支援 Windows(macOS 和 Linux 版本正在開發中)
- 平均可執行檔案大小:70-80MB
|  |
---|
*部分,我需要翻譯關於 Astra 創新方法強調 JavaScript 打包解決方案的現代性和效率的描述。 |
我會確保:
- 使用簡體中文語法而非英語語法
- 保持內容易於理解
- 不翻譯專有名詞(如 Astra、Node.js、SEA、JavaScript)
- 保持原文結構
- 使譯文流暢自然
- 在英文專有名詞兩側新增空格
紅色三角形的影像象徵著與 Astra 使用 Node.js SEA 特性相關的技術創新和現代性。其簡潔而幾何化的設計反映了本段討論的直觀而先進的技術方法。 Astra 的創新方法強調 JavaScript 打包解決方案的現代性和效率
大小考量
生成的可執行檔案大小也成為討論的話題。Astra 生成的二進位制檔案平均為 70-80MB,建立者將其描述為比大多數編譯器更輕量。這一說法促使一些開發者質疑在當今的 JavaScript 生態系統中什麼才算輕量。
一位評論者幽默地指出,在 node_modules 資料夾動輒幾個 GB 的時代,對檔案大小的看法已經發生了轉變。其他人則指出,像 Bun 的可執行檔案生成功能等競爭解決方案可能會生成稍小的檔案,儘管與傳統編譯語言相比仍然相當大。
一些開發者質疑這種大型可執行檔案對於簡單應用程式是否合理,認為開銷主要來自於捆綁整個 Node.js 執行時和支援庫,如用於本地化的 ICU。
安裝選項
全域性安裝
npm i -g astra-cli
yarn global add astra-cli
pnpm add -g astra-cli
專案安裝
npm i --save-dev astra-cli
yarn add --dev astra-cli
pnpm add -D astra-cli
使用場景和限制
Astra 專為使用 Express 或 Fastify 等框架構建的命令列介面(CLI)和伺服器應用程式設計。建立者明確表示,它不是 Electron 的替代品,後者設計用於具有圖形介面的桌面應用程式。
目前,Astra 僅支援 Windows 應用程式,儘管開發者提到正在開發 macOS 和 Linux 支援。這一限制,加上一些評論者提到的相對簡單的文件,表明該專案仍在發展中。
JavaScript 社群對 Astra 的反應凸顯了生態系統中持續存在的挑戰:平衡現代功能與合理的資源使用,選擇適當的術語,以及在便利性和技術精確性之間找到正確的權衡。隨著 Node.js SEA 繼續從實驗狀態走向成熟,像 Astra 這樣的工具可能會幫助建立 JavaScript 應用程式分發的新標準。
參考:Astra