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
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, abypkg
mohl vybratassets
, 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říkazyrequire()
v kódu a automaticky tyto soubory zahrne jako statické prostředky. Proto se může stát, že tyto soubory nebudete muset vpackage.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ě:
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.