How to create an executable (.exe) file from JavaScript code (using Node.js)

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
(lähde: gist.github.com)

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, jotta pkg voi valita assets-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 koodin require()-lausekkeita ja sisällyttää nämä tiedostot automaattisesti staattisiksi varoiksi. Siksi sinun ei välttämättä tarvitse määritellä näitä tiedostoja staattisiksi varoiksi package.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.

(lähde: gist.github.com)

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ä.

Vastaa

Sähköpostiosoitettasi ei julkaista.