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
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 apkg
ki tudja választani aassets
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 arequire()
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 apackage.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:
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.