Creating An Executable
For this demo, we are going to use pkg
command-line tool. Voit vapaasti valita nexe
tai muun haluamasi, mutta minusta pkg
on helpompi käyttää. Ensinnäkin meidän on asennettava pkg
globaalisti komennolla npm
. Voit asentaa sen myös paikallisesti käyttääksesi CLI-käyttöliittymää ohjelmallisesti.
$ npm install --global pkg
Kun paketti on asennettu globaalisti, saat pkg
-komennon suoritettavien tiedostojen luomista varten. pkg
-komento tarvitsee syötetiedoston, joka on entry JavaScript-ohjelma, joka suoritetaan, kun käyttäjä kaksoisnapsauttaa luotua suoritettavaa tiedostoa. Muut komentorivin vaihtoehdot ohjaavat sitä, miten suoritettava tiedosto luodaan.
Syöttötiedosto
Syöttötiedoston polku annetaan <input>
-argumentilla, kuten meidän tapauksessamme $ pkg server.js
-komennolla, joka on paikallinen tiedostopolku. Voimme kuitenkin antaa polun myös package.json
-komentoon, jolloin pkg
-komento käyttää package.json
:n bin
-ominaisuutta löytääkseen entry JavaScript -tiedoston polun. Jos annetaan hakemistopolku, komento pkg
etsii kyseisen hakemiston package.json
-tiedoston käyttäen sen bin
-ominaisuutta.
Assets
Assets ovat staattisia resursseja, kuten .html
, .js
, .css
, .png
, .json
tiedostot, jotka pitäisi sisällyttää suoritettavaan tiedostoon. Käskyäksemme pkg
sisällyttämään tällaiset tiedostot suoritettavaan tiedostoon, meidän on annettava nämä tiedostopolut package.json
:n pkg.assets
-ominaisuuden package.json
kautta. Sen arvo on glob-kuvio tai joukko glob-kuvioita.
💡 Tässä tapauksessa
package.json
:n pitäisi olla syöttöpolku, jottapkg
voi valitaassets
-tiedostot, jotka on sisällytettävä suoritettavaan tiedostoon.
Kun suoritettava tiedosto luodaan, pkg
sisällyttää syötetyn JavaScriptiä sisältävän tiedoston yhdessä staattisten omaisuuserien kanssa yhteen suoritettavaan tiedostoon. Tässä kohtaa asiat muuttuvat hieman monimutkaisiksi. Koska kaikki projektitiedostot on nyt pakattu yhteen tiedostoon, suhteelliset tiedostopolut menettävät merkityksensä, samoin kansiorakenne.
Mutta ajon aikana (kun suoritettava tiedosto on käynnissä) nämä tiedostot järjestetään virtuaaliseen tiedostojärjestelmään, jota kutsutaan tilannekuvatiedostojärjestelmäksi. Yleensä näillä tiedostoilla on ajonaikana /snapshot/
(tai C:\snapshot\
windowsissa) etuliite polussaan ikään kuin ne sijaitsisivat järjestelmän /snapshot
-hakemiston sisällä.
Mutta voit turvallisesti paikantaa varatiedoston suoritettavassa ohjelmassa (ajonaikana) käyttämällä path.join
-menetelmää ja __dirname
-muuttujaa suhteellisen polun rakentamiseksi, kuten path.join( __dirname, './www/main.js' )
. Polku toimii aivan kuten oikea hakemistopolku oikeassa tiedostojärjestelmässä. Jos haluat tietää enemmän snapshot-tiedostojärjestelmästä, lue tämä dokumentaatio.
💡 Varo. Kääntämisen aikana
pkg
tarkastelee koodinrequire()
-lausekkeita ja sisällyttää nämä tiedostot automaattisesti staattisiksi varoiksi. Siksi sinun ei välttämättä tarvitse määritellä näitä tiedostoja staattisiksi varoiksipackage.json
:ssä. Tähän liittyy kuitenkin joitakin varoituksia, jotka selitetään tässä.
Targets
Voidaan luoda suoritettava tiedosto tietylle järjestelmälle käyttämällä --targets
-komentorivilippua. Tämän lipun arvo merkkijono muodossa <node>-<platform>-<arch>
. Se voi olla myös pilkulla erotettu luettelo tästä kuviosta useiden järjestelmäarkkitehtuurien kohdentamiseksi. Voit myös käyttää package.json
:n pkg.targets
-kenttää näiden arvojen määrittämiseen.
node
-arvo on solmun tavoiteltu pääversio. platform
-arvo on kohdekäyttöjärjestelmän nimi, ja se voi olla jokin näistä freebsd, linux, alpine, macos, win
. arch
-arvo on kohdeprosessoriarkkitehtuuri ja se voi olla jokin näistä x64, x86, armv6, armv7
.
Voidaan jättää jokin näistä arvoista pois kohdemäärittelystä. Tällöin pkg
käyttää sen arvoa nykyisestä järjestelmäkonfiguraatiosta. Voimme käyttää 'host'
:n arvona --targets
:n arvoa, jolloin kaikki nämä arvot saadaan nykyisestä järjestelmäkonfiguraatiosta.
Output
Yritämme luoda suoritettavia tiedostoja macOS- ja Windows-käyttöjärjestelmille, erityisesti x64
-prosessoriarkkitehtuurille. Koska tulopisteemme on server.js
, käytämme package.json
:n bin
-ominaisuutta package.json
osoittamaan sen tiedostopolun. Lisäksi mainitsemme kaikki tiedostopolut node_modules
:n ja src
:n sisällä staattisina ominaisuuksina, koska server.js
on riippuvainen siitä. Ottaen huomioon kaikki nämä vaatimukset, meidän package.json
näyttää alla olevalta.
Luodaaksemme binääriset suoritettavat tiedostot, meidän on suoritettava pkg .
-komento, koska haluamme pkg
:n käyttävän nykyisestä hakemistosta löytyvää package.json
-tiedostoa paikallistamaan syötetiedoston, omaisuuserät ja tavoitteet. Voisimme myös käyttää pkg package.json
-komentoa, joka tekee myös saman asian.
Kun tämä komento on suoritettu, pkg
lataa sopivat Node.js-binääritiedostot targets
-arvojen perusteella ja tallentaa ne välimuistiin hakemistoon, joka on määritetty ympäristömuuttujan PKG_CACHE_PATH
avulla, jotta seuraavalla kerralla, kun samat kohteet kohdataan, pkg
voisi käyttää välimuistiin tallennettuja binääritiedostoja.
Kun kaikki binääritiedostot on ladattu, pkg
generoi suoritettavat tiedostot nykyiseen hakemistoon. Näiden tiedostojen tiedostonimen ja -laajennuksen päättää pkg
, ja se näyttää tavallisesti <package>-<target>.<ext>
:ltä, jossa package
on package.json
:n name
-arvo.
Voidaan kuitenkin kontrolloida nimeämissuunnitelmaa ja tulostushakemistoa käyttämällä --output
– tai --out-path
-optioarvoja. Käytämme --output
-lippua määrittääksemme tulostushakemiston ja suoritettavan tiedoston nimen.
$ pkg --output build/web .
Yllä oleva komento tuottaa seuraavat tiedostot build
-hakemiston sisällä.