webentwicklung-frage-antwort-db.com.de

Wie erstelle ich Exe-Dateien aus einer node.js-App?

Ich habe eine Node-App, die ich geschrieben habe und die ich wie folgt ausführe:

node.exe app.js inputArg

Gibt es eine Möglichkeit, wie ich dies in eine EXE-Datei packen kann? Also kann ich einfach so etwas machen?

App.exe inputArg

Ich habe eine Möglichkeit, dies mit einer Batch-Datei vorzutäuschen, also kann ich dies tun:

App.bat inputArg

Dies setzt jedoch voraus, dass ich alle Abhängigkeiten und Knoten in diesem Ordner habe, was nicht ideal ist.

113
Aishwar

Es gibt ein paar kostenlose und kommerzielle Alternativen. Ich habe keine von ihnen verwendet, aber theoretisch sollten sie funktionieren:

In den meisten Fällen müssen Sie die Batch-Datei als ausführbare Hauptdatei behalten und anschließend node.exe und Ihre Skripts bündeln.

Abhängig von Ihrem Skript haben Sie auch die Möglichkeit, es nach JSDB zu portieren. Dies unterstützt eine einfache Möglichkeit, ausführbare Dateien zu erstellen durch einfaches Portieren Ressourcen anhängen.

Eine dritte Quasi-Lösung besteht darin, den Knoten irgendwo wie C:\utils und fügen Sie diesen Ordner Ihrer Umgebungsvariablen PATH hinzu. Dann können Sie .bat-Dateien in diesem Verzeichnis erstellen, in denen Node + Ihre bevorzugten Skripte ausgeführt werden. Auf diese Weise funktioniert Coffeescript coffee unter Windows. Dieses Setup kann mit einer Batch-Datei, einem VB-Skript oder einem Installationsprogramm automatisiert werden.

30
Ricardo Tomasi

Die Lösung, die ich verwendet habe, ist Roger Wangs Node-Webkit .

Dies ist eine fantastische Möglichkeit, NodeJS-Apps zu verpacken und zu verteilen. Sie haben sogar die Möglichkeit, die gesamte App als einzelne ausführbare Datei zu "bündeln". Es unterstützt Windows, Mac und Linux.

Hier Hier finden Sie einige Dokumente zu den verschiedenen Optionen für die Bereitstellung von Node-Webkit-Apps. Zusammenfassend können Sie jedoch Folgendes tun:

  1. Komprimieren Sie alle Ihre Dateien mit einer package.json im Stammverzeichnis
  2. Ändern Sie die Erweiterung von .Zip in .nw
  3. copy/b nw.exe + app.nw app.exe

Nur als zusätzliche Anmerkung: Ich habe mehrere CD-Anwendungen für die Produktionsbox/-installation mit dieser Funktion ausgeliefert, und sie hat hervorragend funktioniert. Dieselbe App läuft unter Windows, Mac, Linux und über das Internet.

47
Clayton Gulick

Für alle, die über diese Frage stolpern, gibt es jetzt zwei Projekte, die aus Ihren Knotenprojekten Exes erstellen: Pkg und Electron.atom.io , sie unterscheiden sich geringfügig:

  1. Pkg kompiliert Ihr Projekt in nativen Code, enthält außerdem Assets UND eine NodeJS-Installation (das System muss keine NodeJS installieren, um die EXE-Datei auszuführen ). Ihr Quellcode wird nicht enthalten sein. Die resultierende ausführbare Datei ist NUR Windows (.exe). Alle Plattformen werden jetzt unterstützt. Für kommerzielle Produkte ist jetzt eine Lizenz erforderlich. Vollständig Open Source.
  2. Electron.atom.io Während Electron.atom.io keine EXE-Datei für Sie komprimiert und generiert, KANN es zum Verteilen von NodeJS-Apps verwendet werden, da sie eine Möglichkeit dazu bieten Anwendungen verteilen . Die Vorteile sind, dass electron plattformübergreifend ist (Windows, Mac OSX, Linux). Die Nachteile sind, dass Ihr Quellcode enthalten sein WIRD, auch wenn sie eine Möglichkeit bieten, Ihre App in einem asar Archiv zu verbreiten . Es wird nicht kugelsicher sein, aber es ist immer noch besser als Ihre Quelle in der Ebene.
26
sokie

Standardmäßig ordnet Windows .js Dateien dem Windows Script Host , dem eigenständigen JS-Laufzeitmodul von Microsoft, zu. Wenn Sie script.js an einer Eingabeaufforderung eingeben (oder im Explorer auf eine .js -Datei doppelklicken), wird das Skript ausgeführt von wscript.exe.

Dies kann sein Lösen eines lokalen Problems mit einer globalen Einstellung , aber Sie können Verknüpfen.js Dateien mit node.exe stattdessen, so dass Wenn Sie script.js an einer Eingabeaufforderung eingeben oder Elemente auf Skripte doppelklicken/ziehen, werden sie mit Node gestartet.

Wenn Sie - wie ich - .js Dateien mit einem Editor verknüpft haben, sodass ein Doppelklick darauf Ihren bevorzugten Texteditor öffnet, hilft dieser Vorschlag nicht viel. Sie können auch einen Rechtsklick-Menüeintrag hinzufügen von "Mit Knoten ausführen" auf .js Dateien anwenden, obwohl diese Alternative Ihre Befehlszeilenanforderungen nicht erfüllt.


Die einfachste Lösung ist wahrscheinlich die Verwendung einer Batch - Datei - Sie müssen keine Kopie von Node in dem Ordner haben, in dem sich Ihr Skript befindet. Verweisen Sie einfach auf den Node absolut ausführbar:

"C:\Program Files (x86)\nodejs\node.exe" app.js %*

Eine andere Alternative ist diese sehr einfache C # -App, die Node=) mit ihrem eigenen Dateinamen + .js als auszuführendes Skript startet und alle Befehlszeilenargumente weitergibt.

class Program
{
    static void Main(string[] args)
    {
        var info = System.Diagnostics.Process.GetCurrentProcess();
        var proc = new System.Diagnostics.ProcessStartInfo(@"C:\Program Files (x86)\nodejs\node.exe", "\"" + info.ProcessName + ".js\" " + String.Join(" ", args));
        proc.UseShellExecute = false;
        System.Diagnostics.Process.Start(proc);
    }
}

Wenn Sie die resultierende EXE-Datei "app.exe" nennen, können Sie app arg1 ... eingeben und Node wird mit der Befehlszeile "app.js" arg1 ... gestartet. Hinweis Die C # -Bootstrapper-App wird sofort beendet, sodass Node für das Konsolenfenster zuständig ist.

Da dies wahrscheinlich von relativ großem Interesse ist, habe ich Folgendes gemacht: verfügbar auf GitHub , einschließlich der kompilierten exe , wenn es Ihre Sache ist, mit Fremden in Lieferwagen einzusteigen.

22
josh3736

Das beste Tool, das ich kenne, ist das NodeJS-Tool: zeit/pkg

Es ist sehr einfach zu benutzen (viel mehr als Nexe, nur als Beispiel), Sie können es einfach global installieren: npm install -g pkg

so erstellen Sie ausführbare Dateien für MacOS, Linux und Windows:

pkg exampleApp.js

Ich hatte ein bisschen komplizierten Code, der NodeJS-Socket-Server verwendete, ich habe verschiedene Anwendungen ausprobiert, keine von ihnen hat ihn richtig erstellt, außer zeit/pkg .

14
user8376713

Habe es noch nicht ausprobiert, aber nexe sieht so aus, als ob nexe das kann:

https://github.com/crcn/nexe

12
B T

Da diese Frage beantwortet wurde, wurde eine andere Lösung gestartet.

https://github.com/appjs/appjs

Zum Zeitpunkt des Schreibens ist dies die Komplettlösung für das Packen von node.js-Apps über ein abgespecktes Chrompaket, das in einer ausführbaren Datei kompiliert ist.

Bearbeiten: AppJS ist nicht mehr aktiv, schlägt jedoch eine Gabelung vor, die als Deskshell bezeichnet wird.

https://github.com/sihorton/appjs-deskshell/

12
bitfed

Hier gibt es viele gute Antworten, aber sie sind nicht alle so einfach wie JXcore .

Sobald Sie JXcore unter Windows installiert haben, müssen Sie nur noch Folgendes ausführen:

jx package app.js "myAppName" -native

Dadurch wird eine EXE-Datei erstellt, die Sie verteilen und ohne externe Abhängigkeiten ausführen können (Sie benötigen nicht einmal JXcore oder Node.js auf dem System).

Hier ist die Dokumentation zu dieser Funktionalität: http://jxcore.com/packaging-code-protection/#cat-74

Bearbeiten 2018

Das Projekt ist jetzt tot, aber es wird immer noch hier gehostet: https://github.com/jxcore/jxcore-release (danke @Elmue)

11
Nepoxx

Versuchen Sie disclose: https://github.com/pmq20/disclose

disclose erstellt im Wesentlichen eine selbstextrahierende Datei aus Ihrem Node.js-Projekt und dem Node.js-Interpreter mit den folgenden Eigenschaften:

  1. Keine GUI. Reine CLI.
  2. Keine Laufzeitabhängigkeiten
  3. Unterstützt sowohl Windows als auch Unix
  4. Läuft zum ersten Mal langsam (in ein Cache-Verzeichnis extrahieren) und dann für immer schnell

Versuchen Sie node-compiler: https://github.com/pmq20/node-compiler

Ich habe ein neues Projekt mit dem Namen node-compiler Erstellt, um Ihr Node.js-Projekt in eine einzige ausführbare Datei zu kompilieren.

Es ist besser als disclose, da es zum ersten Mal nie langsam läuft, da Ihr Quellcode zusammen mit dem Interpreter von Node.j kompiliert wird, genau wie die Standardbibliotheken von Node.j.

Außerdem werden Datei- und Verzeichnisanforderungen zur Laufzeit transparent in den Speicher und nicht in das Dateisystem umgeleitet. Damit ist kein Quellcode erforderlich, um das kompilierte Produkt auszuführen.

So funktioniert es: https://speakerdeck.com/pmq20/node-dot-js-compiler-compiling-your-node-dot-js-application-into-a-single-executable

Vergleich mit ähnlichen Projekten,

  • pkg ( https://github.com/zeit/pkg ): Pkg hat fs. * APIs dynamisch gehackt, um auf paketinterne Dateien zuzugreifen, während Node.js Compiler sie alleine lässt und stattdessen bearbeitet eine tiefere Ebene über libsquash. Pkg verwendet JSON, um paketinterne Dateien zu speichern, während der Node.js-Compiler das ausgefeiltere und am häufigsten verwendete SquashFS als Datenstruktur verwendet.

  • EncloseJS ( http://enclosejs.com/ ): EncloseJS beschränkt den Zugriff auf paketinterne Dateien auf nur fünf fs. * -APIs, während der Node.js-Compiler alle fs. * -APIs unterstützt. EncloseJS ist urheberrechtlich lizenziert und kostet Geld, wenn es verwendet wird, während Node.js Compiler MIT-lizenziert ist und die Benutzer die Möglichkeit haben, es zu verwenden und zu ändern.

  • Nexe ( https://github.com/nexe/nexe ): Nexe unterstützt wegen der Verwendung von browserify keine dynamischen Anforderungen, wohingegen Node.js Compiler alle Arten von Anforderungen unterstützt, einschließlich require.resolve.

  • asar ( https://github.com/electron/asar ): Asar verwendet JSON zum Speichern von Dateiinformationen, während Node.js Compiler SquashFS verwendet. Asar hält das Codearchiv und die ausführbare Datei getrennt, während Node.js Compiler den gesamten JavaScript-Quellcode mit der virtuellen Maschine von Node.js verknüpft und eine einzige ausführbare Datei als Endprodukt generiert.

  • AppImage ( http://appimage.org/ ): AppImage unterstützt nur Linux mit einem Kernel, der SquashFS unterstützt, während Node.js Compiler alle drei Plattformen von Linux, MacOS und Windows unterstützt, unterdessen ohne spezielle Feature-Anforderungen aus dem Kernel.

6
Minqi Pan

Ich empfehle Ihnen BoxedApp dafür. Es ist ein kommerzielles Produkt, das sehr gut funktioniert. Es funktioniert für jede NodeJS-App. Der Endbenutzer erhält nur eine EXE-Datei für Ihre App. Keine Installation nötig.

In Electron muss der Endbenutzer beispielsweise Ihre App installieren/dekomprimieren, und er sieht alle Quelldateien Ihres Codes.

BoxedApp Es packt alle Dateien und Abhängigkeiten, die Ihre NodeJS-App benötigt. Es unterstützt Komprimierungen und die kompilierte Datei funktioniert unter Windows XP +

Wenn Sie es verwenden, müssen Sie Node.EXE zur kompilierten App hinzufügen. Wählen Sie eine Knotenversion, die Windows unterstützt XP (Wenn Sie dies benötigen)

Das Programm unterstützt Befehlszeilenargumente. Nach dem Paket können Sie dies tun

c:\myApp argument1

Und Sie können das Argument in Ihrem Knotencode erhalten:

process.argv[1]

In manchen Fällen weist Ihre App Dateiabhängigkeiten auf, sodass Sie in BoxedApp einen beliebigen Ordner und eine beliebige Datei als Abhängigkeit hinzufügen können. Sie können beispielsweise eine Einstellungsdatei einfügen.

var mySettings=require('fs').readFileSync('./settings.jgon').toString()

Weitere Informationen:

Nur eine Anmerkung: Normalerweise empfehle ich Open Source/Freie Software, aber in diesem Fall habe ich nichts gefunden, was die Arbeit erledigt.

Ich habe festgestellt, dass eine dieser Lösungen meinen Anforderungen entspricht, und habe daher eine eigene Version des Knotens namens node2exe erstellt, die dies ausführt. Es ist verfügbar unter https://github.com/areve/node2exe

3
areve

Ich habe dieses Thema einige Tage lang untersucht und hier ist, was ich gefunden habe. Optionen fallen in zwei Kategorien:

Wenn Sie eine Desktop-App erstellen möchten, sind die besten Optionen:

1- NW.js : Ermöglicht den direkten Aufruf aller Node.js-Module aus DOM und ermöglicht eine neue Art, Anwendungen mit allen Webtechnologien zu schreiben.

2- Electron : Erstellen Sie plattformübergreifende Desktop-Apps mit JavaScript, HTML und CSS

Hier ist ein guter Vergleich zwischen ihnen: NW.js & Electron Compared . Ich denke, NW.js ist besser und es bietet auch eine Anwendung zum Kompilieren von JS-Dateien. Es gibt auch einige eigenständige ausführbare und Installer-Builder wie Enigma Virtual Box . Beide enthalten eine eingebettete Version von Chrome, die für Server-Apps nicht erforderlich ist.

Wenn Sie eine Server-App packen möchten, sind dies die besten Optionen:

Node-Compiler : AOT-Compiler (Ahead-of-Time) für Node.js, das funktioniert einfach.

Nexe : Erstellt eine einzelne ausführbare Datei aus Ihren node.js-Apps

In dieser Kategorie halte ich den Node-Compiler für besser, der dynamische und native Node-Module unterstützt. Es ist sehr einfach zu bedienen und die Ausgabe beginnt bei 25 MB. Sie können einen vollständigen Vergleich mit anderen Lösungen auf der Seite Node= Compiler lesen. Ich habe nicht viel über Nexe gelesen, aber im Moment scheint es, dass Node Compiler nicht Kompiliert die js-Datei nicht im Binärformat mit der V8-Snapshot-Funktion, ist jedoch für Version 2 geplant. Außerdem ist ein Installer Builder integriert.

2
Ali

Versuchen Sie es mit nexe, bei dem eine einzelne ausführbare Datei aus den Anwendungen von node.j erstellt wird

https://github.com/nexe/nexe

2
Dhrubo

Ich hatte es satt, von der Eingabeaufforderung aus mit dem Gewinnen zu beginnen, und bin auch darauf gestoßen. Leicht verbessert ver. über was josh3736 . Hierbei werden mithilfe einer XML-Datei einige Einstellungen abgerufen. Zum Beispiel der Pfad zu Node.exe sowie die Datei, die in der Standard-app.js gestartet werden soll. Auch die zu ladende Umgebung (Produktion, Entwicklung usw.), die Sie in Ihren app.js (oder server.js oder wie auch immer Sie es genannt haben) angegeben haben. Im Wesentlichen fügt es das NODE_ENV={0} wobei {0} der Name Ihrer Konfiguration in app.js als Variable für Sie ist. Sie tun dies, indem Sie das Element "mode" in der Datei config.xml ändern. Sie können das Projekt hier greifen ==> Github . Beachten Sie, dass Sie in den Post-Build-Ereignissen die Kopierpfade so ändern können, dass sie automatisch über Ihre config.xml und die ausführbare Datei in Ihr Nodejs -Verzeichnis kopiert werden, um nur einen Schritt zu speichern. Andernfalls bearbeiten Sie diese oder Ihr Build wird eine Warnung auslösen.

var startInfo = new ProcessStartInfo();
        startInfo.FileName = nodepath;
        startInfo.Arguments = apppath;
        startInfo.UseShellExecute = false;
        startInfo.CreateNoWindow = false;
        startInfo.WindowStyle = ProcessWindowStyle.Hidden;

        if(env.Length > 0)
            startInfo.EnvironmentVariables.Add("NODE_ENV", env);

        try
        {
            using (Process p = Process.Start(startInfo))
            {
                p.WaitForExit();
            }
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.Message.ToString(), "Start Error", MessageBoxButtons.OK);
        }
1
origin1tech

Möglicherweise gibt es viele andere Optionen, aber meines Wissens gibt es ein Projekt in der aktiven Entwicklung auf GitHub https://github.com/zeit/pkg . Sie können damit spielen. Noch eine unter https://github.com/nexe/nexe , aber nicht in aktiver Entwicklung.

1
Rohit Luthra

Es gibt ein OpenSource-Build-Tool-Projekt namens nodebob . Ich gehe davon aus, dass Arbeitsplattformfenster,

  1. einfach klonen oder projekt herunterladen
  2. kopieren Sie alle Ihre Node-Webkit-Projektdateien in den App-Ordner.
  3. führen Sie das Skript build.bat aus.

Sie finden die ausführbare Datei im Release-Ordner.

0
cagcak