2016-05-01 13 views
3

Ich probiere eine einfache Hello World Electron App in Linux aus. Ich möchte es verpacken und es unter Windows installieren, um zu testen, ob es dort gut läuft.Include node_modules beim Packen von Electron Desktop-App?

Wenn ich 'npm install' gemacht habe, hat es einen Ordner node_modules von ~ 112 MB erstellt. Ich habe noch nichts, das sogar diese Module verwendet, und das Beispiel startet gut, wenn ich diesen Ordner auch lösche. Die package.json Datei hat 'Elektron-prebuilt' als das einzige Element in devDependencies, so nehme ich an, der Knoten node_modules war dafür.

Also mein Zweifel ist, sollte dieser Ordner in das endgültige Paket enthalten sein, wenn ich möchte, dass es unter Windows läuft?

Ich überprüfte die Dokumentation here, aber es hat nur die 3 Dateien und keine Abhängigkeiten, so dass ich nicht sicher war, was in Fällen zu tun, in denen Sie explizit einige haben.

Antwort

2

electron-packager ist eine leichtgewichtige Abstraktion, die den Aufbau von Elektron-Anwendungen für jede Plattform ein wenig langweilig macht.

Es wird Ihre Anwendungen durchlaufen und eine ausführbare Datei für jedes der von Ihnen angegebenen Betriebssysteme erstellen. Es wird sich darum kümmern, Ihre Anwendung zu bündeln. Sie müssen sich keine Gedanken darüber machen, dass node_modules im endgültigen Build enthalten sein soll.

Im Allgemeinen wird es nicht empfohlen, auch nur node_modules in Versionskontrolle zu überprüfen.

+0

Ich habe node_modules der Eigenschaft - ignore hinzugefügt, während die Verpackung und die Größe immer noch die gleichen waren. Die EXE-Datei selbst war 70 MB, und ich vermute, das liegt an der Bündelung von Elektronen? Unabhängig davon, ob ich einen Elektronenpacker verwende oder nicht, werde ich dann ein Paket mit ähnlicher Größe bekommen? – Kodathon

+0

Kodathon-Yea, meiner Erfahrung nach, OS X-Bundles sind in der Regel rund 450 MB, Linux etwa 120 MB und 225 für Windows. Das liegt daran, dass wir eine abgespeckte Version von Chrome, den gesamten Node und eine Reihe von Paketen für die Betriebssystemintegration enthalten, die über den von uns geschriebenen Code hinausgehen. –

+0

Steve Kinney - Das ist ziemlich groß. Der Microsoft Visual Studio Code baut auf Electron auf, scheint aber kein großer Installer zu sein. Wie auch immer, kann es nicht so implementiert werden, dass Knoten und andere nur dann bereitgestellt werden, wenn sie nicht bereits auf dem Zielsystem vorhanden sind, z. B. nach einer vorausgesetzten Überprüfung? – Kodathon

7

Kurze Antwort:

Sie tun node_modules Ordner in Ihrer Endausschüttung benötigen, wenn Sie über npm zusätzliche Bibliotheken installieren und sie dann aus dem Code verweisen.

Lange Antwort:

Ich bin nicht sicher, aber Sie sind wahrscheinlich verwirrt, weil Sie electron-prebuilt installiert, die auch ein npm Paket ist, aber dieses ist etwas Besonderes, da sie für die Entwicklung und Verpackung erforderlich ist, und doesn Sie können nicht als einfache Bibliothek für Ihre App dienen. Ich würde empfehlen, eine Zwei-Paket-Struktur für Ihre Anwendung zu verwenden, um Entwicklungs- und Anwendungspakete zu trennen. Hier ist ein Beispiel für eine Ordnerstruktur für meinen Elektron-App (lass es MyApp nennen):

  • MeineAnw: Lösung Stammordner für eine einfache Anwendung dieses auf Ihren Repository Stammordner Karte würden

    • gulpfile .js - build configuration, wenn Sie gulp verwenden
    • package.json - dev Paketmetadaten. Dev-Paket ist nicht Ihre Anwendung, sondern eher ein Wrapper drum herum.
    • andere Dateien, wie. Hgignore, README.md, was auch immer.
    • node_modules: alle Entwickler Abhängigkeiten dieser Pakete enthalten, die Sie für die Entwicklung benötigen, wie gulp, electron-prebuilt, Plugins schlucke usw. aus Repo exluded
    • dist: Distributionsordner, das ist, wo meine Aufgaben schluck sollen verpackte App-Verteilung setzen, wenn es zur Produktion geht.ausgeschlossen von Repo

    • Quelle: alle App-Quellen. Jetzt ist dies Ihre Anwendung. Der gesamte Inhalt dieses Ordners wird in eine Distribution gepackt.

      • bower.json - Bower manifestieren, falls Sie verwenden es
      • package.json - App-Paket Metadaten
      • node_modules: alle npm App Abhängigkeiten (wie SQLite, eckig, d3, etc.) ; aus Repo ausgeschlossen
      • bower_modules: alle App Abhängigkeiten Bower von Repo ausgeschlossen
      • app.js - App Einspeisepunkt

Also, wenn ich brauche eine installieren Paket, das mir bei der Entwicklung hilft (normalerweise ein Gulp-Plugin) Ich navigiere zu/MyApp und führe dort npm install -D [package] aus. Wenn ich eine Bibliothek für die Verwendung meiner App installieren muss, z. B. ein Front-End-Framework, navigiere ich zu/MyApp/src und führe dort npm install -S [package] aus.

Wenn ich schnell Elektronen-App in Entwicklung laufen lassen muss füttere ich /MyApp/src Ordner gulp-run-electron Plugin. Alternativ können Sie, wenn Sie electron-prebuilt für Ihr Entwicklungspaket installiert haben, zu /MyApp navigieren und /MyApp/node_modules/electron-prebuilt/dist/electron[.exe] ./src ausführen. Sie können electron-prebuilt auch global mit npm i -g electron-prebuilt installieren und einfach electron ./src ausführen.

Wenn ich meine App für die Veröffentlichung oder Tests packen muss, verwende ich gulp-electron Plugin für Schluck, um eine Verteilung zu erzeugen. Es gibt andere Möglichkeiten, dies zu tun, wie electron-packager oder einen seiner Wrapper für ein Build-System Ihrer Wahl zu verwenden, oder das Ganze manuell zu tun.

Edit: Da Sie über die Größe besorgt sind, wird yeah vorgebaute Elektron selbst ziemlich viel Platz brauchen, aber der Installer kann effektiv mit einigen Archiver, wie 7z geschrumpft werden.

+0

Ich wurde auch durch meine überbevölkerten node_module beim Erstellen einer Tutorial-App verwirrt. Sie haben mir geholfen zu verstehen, dass meine Verwendung von Elektronen-Prebuilt das erklären kann. –