|

Node.js-Projekte als ausführbare Binärdateien

Mit nexe und pkg kann man sehr einfach Node.js-basierte Anwendungen als ausführbare Anwendungen packen und somit einfach verteilen. Anwender müssen dafür dann nicht mehr Node.js oder npm / Yarn installieren, da dies bereits in der generierten Datei mitgeliefert wird.

Anhand des folgenden Beispiels von meinem nanoshuffle Projekt zeige ich kurz, wie das funktioniert.

package.json

{
  "name": "nanoshuffle",
  "version": "1.0.0",
  "main": "index.js",
  "license": "MIT"
}

index.js

const pkg = require('./package.json')

console.log(`${pkg.name} ${pkg.version}`)

console.log(
    process.argv.splice(3)
        .map(a => [Math.random(),a])
        .sort((a,b) => a[0]-b[0])
        .map(a => a[1])
        .slice(0,process.argv[2])
        .map((a,i) => `${i+1}: ${a}`)
        .join("\n")
)

nexe installieren

nexe wird per yarn global add nexe oder npm i -g nexe installiert und dann auf der Konsole z.B. mit nexe index.js ausgeführt.

Der erste Parameter nach nexe ist der Einstiegspunkt der Anwendung (im Grunde unser main-Eintrag in package.json).

Per -o name können wir einen anderen Dateinamen für die generierte Binärdatei vergeben. Denn standardmäßig wird der aktuelle Ordnername verwendet.

Wenn man noch die zu verwendende und gepackte Node.js-Version festlegen möchte, kann man dies mit -t machen.

Die direkt verfügbaren Versionen kann man unter https://github.com/nexe/nexe/releases bei dem entsprechenden Release sehen (aktuell wäre es für Nexe 3.1.0 die Liste bei dem Release für 3.0.0).

Wenn man eine andere Version nutzen möchte, muss man diese mit --build als weiteres Argument entsprechend kompilieren.

Der gesamte Befehl kann dann so aussehen:
nexe index.js -o nanoshuffle
nexe index.js -o nanoshuffle -t 4.8.4

Bei pkg funktioniert das analog ähnlich:

pkg index.js -o nanoshuffle
pkg index.js -o nanoshuffle -t node4

Binärdateien für Linux, macOS und Windows

Darüber können auch direkt die Binärdateien für Linux, macOS und Windows generiert werden.

Für Windows wäre das zum Beispiel:
nexe index.js -o nanoshuffle -t windows
pkg index.js -o nanoshuffle -t windows

nexe index.js -o nanoshuffle -t windows-4.8.4
pkg index.js -o nanoshuffle -t node4-windows

Beide Lösungen bieten noch viel mehr Optionen und sind hilfreich um ganze Anwendungen damit zu packen und ohne Node.js-Umgebung auszuführen.

Ihr könnt darüber auch zum Beispiel per CI jeweils die nötigen Binärdateien generieren wie ich es bei https://github.com/DanielRuf/nexe-builder gemacht habe.