Jak vytvořit spustitelný soubor (.exe) z kódu JavaScriptu (pomocí Node.js)

Vytvoření spustitelného souboru

Pro tuto ukázku použijeme pkg nástroj příkazového řádku. Můžete si zvolit nexe nebo jiný podle vlastního výběru, ale pkg se mi zdá jednodušší. Nejprve musíme pkg globálně nainstalovat pomocí příkazu npm. Můžete jej také nainstalovat lokálně a používat rozhraní CLI programově.

$ npm install --global pkg
(zdroj: gist.github.com)

Po globální instalaci balíčku získáte příkaz pkg pro vytvoření spustitelných souborů. Příkaz pkg potřebuje vstupní soubor, což je vstupní program v jazyce JavaScript, který se spustí, když uživatel dvakrát klikne na vytvořený spustitelný soubor. Další volby příkazového řádku řídí způsob generování spustitelného souboru.

Vstupní soubor

Cesta ke vstupnímu souboru se zadává prostřednictvím argumentu <input>, jako je v našem případě příkaz $ pkg server.js, což je cesta k lokálnímu souboru. Můžeme však také zadat cestu package.json a příkaz pkg použije vlastnost bin souboru package.json pro vyhledání cesty k vstupnímu souboru JavaScriptu. Pokud je zadána cesta k adresáři, pak příkaz pkg vyhledá soubor package.json tohoto adresáře pomocí jeho vlastnosti bin.

Assets

Assets jsou statické zdroje, například .html, .js, .css, .png, .json soubory, které by měly být součástí spustitelného souboru. Abychom dali pokyn pkg k zahrnutí takových souborů do spustitelného souboru, musíme zadat cesty k těmto souborům prostřednictvím vlastnosti pkg.assets package.json. Její hodnotou je globální vzor nebo pole globálních vzorů.

💡 V tomto případě by package.json měla být vstupní cesta, aby pkg mohl vybrat assets, které je třeba zahrnout do spustitelného souboru.

Při vytváření spustitelného souboru pkg zahrne vstupní soubor JavaScriptu spolu se statickými prostředky do jednoho spustitelného souboru. Zde se věci trochu komplikují. Protože jsou nyní všechny soubory projektu zabaleny do jediného souboru, ztrácejí relativní cesty k souborům svůj význam a tím i struktura složek.

V době běhu (když spustitelný soubor běží) jsou však tyto soubory uspořádány do virtuálního souborového systému, který se nazývá souborový systém snímků. Obvykle mají tyto soubory za běhu ve své cestě předponu /snapshot/ (nebo C:\snapshot\ v systému Windows), jako by se nacházely uvnitř adresáře /snapshot systému.

Soubor s aktivy však můžete bezpečně lokalizovat ve spustitelném souboru (za běhu) pomocí metody path.join a proměnné __dirname pro sestavení relativní cesty, například path.join( __dirname, './www/main.js' ). Cesta bude fungovat stejně dobře, jako kdybyste měli skutečnou cestu k adresáři ve skutečném souborovém systému. Chcete-li se o souborovém systému snapshot dozvědět více, přečtěte si tuto dokumentaci:

💡 Pozor. Během procesu kompilace se pkg podívá na příkazy require() v kódu a automaticky tyto soubory zahrne jako statické prostředky. Proto se může stát, že tyto soubory nebudete muset v package.json uvádět jako statické prostředky. Existují však některá upozornění, jak je vysvětleno zde.

Cíle

Pomocí příznaku --targets příkazového řádku můžeme vygenerovat spustitelný soubor pro konkrétní systém. Hodnota tohoto příznaku řetězec ve formátu <node>-<platform>-<arch>. Může to být také čárkou oddělený seznam tohoto vzoru pro zacílení na více systémových architektur. Pro zadání těchto hodnot byste také mohli použít pole pkg.targets příznaku package.json.

Hodnota node je cílová hlavní verze uzlu. Hodnota platform je název cílového operačního systému a může to být jeden z těchto freebsd, linux, alpine, macos, win. Hodnota arch je cílová architektura procesoru a mohla by to být jedna z těchto x64, x86, armv6, armv7.

Ve specifikaci cíle bychom mohli jednu z těchto hodnot vynechat. V takovém případě pkg použije svou hodnotu z aktuální konfigurace systému. Můžeme použít 'host' jako hodnotu pro --targets, v tom případě se všechny tyto hodnoty získají z aktuální konfigurace systému.

Výstup

Pokusíme se vytvořit spustitelné soubory pro operační systémy MacOS a Windows, zejména pro architekturu procesoru x64. Protože naším vstupním bodem je server.js, použijeme k označení cesty k jeho souboru vlastnost bin package.json. Také budeme uvádět všechny cesty k souborům uvnitř node_modules a src jako statické vlastnosti, protože náš server.js na něm závisí. S ohledem na všechny tyto požadavky vypadá náš package.json následovně:

(zdroj: gist.github.com)

Pro generování binárních spustitelných souborů musíme spustit příkaz pkg ., protože chceme, aby pkg použil soubor package.json z aktuálního adresáře pro vyhledání vstupního souboru, aktiv a cílů. Mohli bychom také použít příkaz pkg package.json, který také dělá totéž.

Po spuštění tohoto příkazu pkg stáhne příslušné binární soubory Node.js na základě hodnot targets a uloží je do mezipaměti v adresáři určeném proměnnou prostředí PKG_CACHE_PATH, takže při příštím setkání se stejnými cíli by pkg mohl použít binární soubory uložené v mezipaměti.

Po stažení všech binárních souborů pkg vygeneruje spustitelné soubory do aktuálního adresáře. O názvu a příponě těchto souborů rozhoduje pkg a obvykle vypadají jako <package>-<target>.<ext>, kde package je hodnota name v package.json.

Schéma pojmenování a výstupní adresář však můžeme řídit pomocí hodnot voleb --output nebo --out-path. Příznak --output použijeme k určení výstupního adresáře a názvu spustitelného souboru.

$ pkg --output build/web .

Výše uvedený příkaz vygeneruje následující soubory uvnitř adresáře build.

node-js-executable
└── build
├── web-node10-win.exe (37.4mb)
└── web-node12-macos (43.4mb)

Nyní můžete dvakrát kliknout na kterýkoli z těchto souborů (podle vašeho počítače) a otevře se webová stránka ve výchozím systémovém prohlížeči zobrazující ovladače jednoho vzorce.

(http://127.0.0.1:52254/)
.

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna.