為什么選擇 Astra
Astra 可能是 npm 上最好的編譯器,平均 exe 文件大小約為 70-80MB(當(dāng)然也取決于代碼),比大多數(shù)編譯器都輕量。
當(dāng)然,如果借助于 upx 可以將文件大小壓縮到約 30MB,其旨在編譯服務(wù)器(express、fastify)或命令行界面(commander),因此并非 Electron 的替代品。
Astra 的典型特性包括:
- 編譯 JavaScript/TypeScript 應(yīng)用程序的新方法,使用的方法與 pkg 或 nexe 等其他編譯器不同
- Astra 由 esbuild 提供支持,可確保最快的編譯速度
- 支持編譯基于 ESM 的應(yīng)用程序,解決了 Node.js SEA 中的諸多限制
- Astra 借助 signale、inquirer 和 chalk 等工具,提供卓越的開(kāi)發(fā)者體驗(yàn)
- 生成獨(dú)立的可執(zhí)行文件,包含所有依賴項(xiàng)的單個(gè) .exe 或二進(jìn)制文件
- 支持創(chuàng)建開(kāi)發(fā)者自己的 exe 文件,例如:修改生成的可執(zhí)行文件的元數(shù)據(jù)(圖標(biāo)、名稱、版本等)
- 面向未來(lái) ,使用值得信賴且不斷發(fā)展的工具構(gòu)建
值得一提的是,Astra 目前只能編譯 Windows 應(yīng)用程序,macOS 和 Linux 系統(tǒng)目前還在積極支持中。
目前 Astra 通過(guò) MIT 協(xié)議開(kāi)源,短短幾周已經(jīng)有超過(guò) 0.8k 的 star,是一個(gè)值得關(guān)注的前端開(kāi)源項(xiàng)目。
如何使用 Astra
開(kāi)發(fā)者可以借助于 yarn 或者 npm 快速上手:
# npmnpm i -g astra-cli# yarn (classic)yarn global add astra-cli# pnpmpnpm add -g astra-cli# for one project only# npmnpm i --save-dev astra-cli# yarnyarn add --dev astra-cli# pnpmpnpm add -D astra-cli
接著使用下面命令編譯 JavaScript/TypeScript 項(xiàng)目:
astra build src/index.js
開(kāi)發(fā)者還可以通過(guò) config 中的 assets 字段來(lái)隱藏二進(jìn)制文件中的部分資源,例如:
export default { assets: { "path/in/binary.txt": "path/to/asset.txt", },};
接著可以通過(guò)下面的方式訪問(wèn) assets:
import {getAssetAsBlob, getAsset, isSea} from "node:sea";import fs from "fs"; if (isSea()) { console.log(getAsset("file.txt", "utf-8")); console.log(await getAssetAsBlob("file.txt").text()); const arrayBuffer = await getAssetAsBlob("file.png").arrayBuffer(); fs.writeFileSync("file.png", Buffer.from(arrayBuffer)); }})();
astra.config.js 中的配置也非常豐富而且都支持修改,例如:
export default { outFile: "dist/app.exe", esbuild: { }, modifyMetadata: true, exe: { companyName: "Your Company", productName: "Your App", fileDescription: "Your App Description", productVersion: "1.0.0", fileVersion: "1.0.0.0", icon: "path/to/icon.ico", copyright: "Copyright ? 2023 Your Company", },};
參考資料
https://github.com/astracompiler/cli
https://astra-js.netlify.app/cli/configuration/
閱讀原文:原文鏈接
該文章在 2025/6/23 12:54:24 編輯過(guò)