Hogyan hozzunk létre egy futtatható (.exe) fájlt JavaScript kódból (a Node.js használatával)

Futtatható fájl létrehozása

Ezért a bemutatóért a pkg parancssori eszközt fogjuk használni. Szabadon választhatod a nexe vagy más tetszésed szerinti eszközt, de én a pkg-t könnyebbnek találom. Először is globálisan telepítenünk kell a pkg programot a npm parancs segítségével. Helyileg is telepítheted, ha programozottan szeretnéd használni a CLI felületet.

$ npm install --global pkg
(forrás: gist.github.com)

Mihelyt a csomag globálisan telepítve van, megkapod a pkg parancsot a futtatható fájlok létrehozásához. A pkg parancsnak szüksége van egy bemeneti fájlra, amely egy belépő JavaScript program, amely akkor fog lefutni, ha a felhasználó duplán kattint a létrehozott futtatható fájlra. A többi parancssori opció szabályozza a végrehajtható fájl létrehozásának módját.

Belépési fájl

A belépési fájl elérési útját a <input> argumentummal adjuk meg, mint például esetünkben a $ pkg server.js parancsot, amely egy helyi fájl elérési útja. De megadhatjuk az package.json elérési útvonalát is, és a pkg parancs a package.json bin tulajdonságát fogja használni a belépési JavaScript fájl elérési útvonalának megkeresésére. Ha könyvtár elérési útvonalát adjuk meg, akkor a pkg parancs az adott könyvtár package.json fájlját keresi meg a bin tulajdonságát használva.

Assets

Assets olyan statikus erőforrások, mint a .html, .js, .css, .png, .json fájlok, amelyeket a futtatható állománynak tartalmaznia kell. Ahhoz, hogy utasítsuk a pkg-t, hogy ilyen fájlokat vegyen fel a futtatható állományba, meg kell adnunk ezeket a fájl elérési útvonalakat a package.json pkg.assets tulajdonságán keresztül. Ennek értéke egy glob minta vagy glob minták tömbje.

💡 Ebben az esetben a package.json-nak kell lennie a bemeneti útvonalnak, hogy a pkg ki tudja választani a assets fájlokat, amelyeket be kell építeni a végrehajtható fájlba.

A végrehajtható fájl létrehozásakor a pkg a statikus eszközökkel együtt egyetlen végrehajtható fájlba foglalja a bemeneti JavaScript fájlt. Ez az a pont, ahol a dolgok egy kicsit bonyolulttá válnak. Mivel az összes projektfájl most egyetlen fájlba van csomagolva, a relatív fájlútvonalak értelmüket vesztik, és a mappaszerkezet is.

De futásidőben (amikor a futtatható fájl fut) ezek a fájlok egy virtuális fájlrendszerbe, az úgynevezett pillanatfelvétel-fájlrendszerbe rendeződnek. Általában ezek a fájlok futásidőben /snapshot/ (vagy C:\snapshot\ Windowsban) előtaggal rendelkeznek az elérési útvonalukban, mintha a rendszer /snapshot könyvtárában lennének.

De biztonságosan megkereshetünk egy eszközfájlt a futtatható programban (futásidőben) a path.join módszer és a __dirname változó segítségével egy relatív elérési útvonal, például path.join( __dirname, './www/main.js' ) létrehozásához. Az elérési útvonal ugyanúgy fog működni, mintha egy valódi könyvtár elérési útvonala lenne egy valódi fájlrendszerben. Ha többet szeretne megtudni a pillanatfelvételes fájlrendszerről, olvassa el ezt a dokumentációt.

💡 Vigyázat! A fordítási folyamat során a pkg megnézi a require() utasításokat a kódban, és automatikusan beilleszti ezeket a fájlokat statikus eszközként. Ezért előfordulhat, hogy az ilyen fájlokat nem kell statikus eszközként megadni a package.json-ban. Van azonban néhány fenntartás, amelyet itt ismertetünk.

Célpontok

A --targets parancssori jelzővel létrehozhatunk egy adott rendszerhez tartozó futtatható fájlt. Ennek a flagnek az értéke egy <node>-<platform>-<arch> formátumú karakterlánc. Ez a minta lehet egy vesszővel elválasztott lista is, ha több rendszerarchitektúrát szeretnénk megcélozni. A package.json pkg.targets mezőjét is használhatja ezen értékek megadására.

A node érték a Node célzott főverziója. A platform érték a cél operációs rendszer neve, és a következő freebsd, linux, alpine, macos, win értékek egyike lehet. A arch érték a célprocesszor architektúrája, és lehet ezek közül valamelyik x64, x86, armv6, armv7.

Ezek közül az egyik értéket kihagyhatjuk a célspecifikációból. Ebben az esetben a pkg az aktuális rendszerkonfigurációból származó értékét használja. Használhatjuk a 'host' értékét a --targets értékeként, ebben az esetben mindezen értékeket az aktuális rendszerkonfigurációból kapjuk.

Kimenet

Megpróbálunk futtatható fájlokat létrehozni a macOS és a Windows operációs rendszerekhez, különösen a x64 processzorarchitektúrához. Mivel a belépési pontunk a server.js, a package.json bin tulajdonságát fogjuk használni a fájl elérési útjának megadására. Emellett a node_modules és a src-n belüli összes fájl elérési útvonalát statikus eszközként fogjuk megemlíteni, mivel a server.js függ tőle. Mindezeket a követelményeket figyelembe véve a package.json-unk az alábbiak szerint néz ki:

(forrás: gist.github.com)

A bináris futtatható fájlok létrehozásához a pkg . parancsot kell végrehajtanunk, mivel azt szeretnénk, ha a pkg a package.json fájlt az aktuális könyvtárból használná a bemeneti fájl, az eszközök és a célok keresésére. Használhatjuk a pkg package.json parancsot is, amely szintén ugyanezt teszi.

A parancs futtatása után a pkg letölti a megfelelő Node.js bináris fájlokat a targets értékek alapján, és a PKG_CACHE_PATH környezeti változó által megadott könyvtárba gyorsítótárazza őket, hogy a következő alkalommal, amikor ugyanazokkal a célokkal találkozunk, a pkg a gyorsítótárazott bináris fájlokat használhassa.

Amikor az összes bináris fájl letöltésre került, a pkg létrehozza a futtatható fájlokat az aktuális könyvtárban. Ezeknek az állományoknak a fájlnevét és kiterjesztését a pkg határozza meg, és általában úgy néz ki, hogy <package>-<target>.<ext>, ahol package a package.json name értéke.

A névsémát és a kimeneti könyvtárat azonban a --output vagy --out-path opciós értékekkel szabályozhatjuk. A --output jelzőt fogjuk használni a kimeneti könyvtár és a futtatható fájl nevének megadásához.

$ pkg --output build/web .

A fenti parancs a következő fájlokat generálja a build könyvtáron belül.

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

Most duplán kattinthat ezeknek a fájloknak bármelyikére (a gépének megfelelően), és ez megnyit egy weboldalt az alapértelmezett rendszerböngészőben, amely megjeleníti a formula egy illesztőprogramját.

(http://127.0.0.1:52254/)

Vélemény, hozzászólás?

Az e-mail-címet nem tesszük közzé.