Was sind die funktionalen Unterschiede zwischen NW.js, Brackets-Shell und Electron?

151

Jetzt, da TideSDK praktisch tot ist, habe ich nach alternativen "Wrappern" gesucht, um HTML / CSS / JS-Anwendungen als eigenständige Desktop-Anwendungen auszuführen. Die drei praktikablen Optionen, auf die ich bisher gestoßen bin, sind NW.js (ehemals Node-Webkit), Brackets-Shell und Electron (ehemals Atom-Shell).

Das Problem ist, dass es keinen hinreichend vollständigen Vergleich zwischen den drei in Bezug auf Funktionsumfang, Kompatibilität usw. zu geben scheint. Ich hoffe, dies in einen mehr oder weniger kanonischen Thread über die (objektiven) Unterschiede zwischen zu verwandeln die drei, insbesondere in Bezug auf:

  • Plattformunterstützung ; Betriebssysteme, Abhängigkeiten usw.
  • Unterstützung von Sprachfunktionen in Bezug auf HTML5, CSS3 und JavaScript. Denken Sie an Dinge wie "Funktioniert HTML5-Video und wenn ja, welche Codecs sind verfügbar?"
  • Nicht standardmäßige Zusatzfunktionen wie Taskleistensymbole, Popup-Benachrichtigungen und vom Betriebssystem gerenderte Menüleisten.
  • Erweiterbarkeit ; z.B. Möglichkeit, nativen Code einzufügen, mit Node.js zu sprechen und so weiter.
  • Architektur ; insbesondere die architektonischen Unterschiede, die sich auf den täglichen Gebrauch als Entwickler auswirken.
  • Debuggen ; enthalten Entwicklungswerkzeuge, Kompatibilität mit häufig verwendeten Werkzeugen wie node-inspectorusw.
  • ... und so weiter.

Was sind die objektiven technischen Unterschiede, die bei der Auswahl als Anwendungsentwickler von Bedeutung sind?

Sven Slootweg
quelle
Haben Sie in der Zwischenzeit Glück gehabt, die Unterschiede zu betrachten? Könnte dieses Wochenende etwas graben
stefan
@stefan Noch nicht, nein: / Ich habe ein wenig mit Node-Webkit im praktischen Sinne experimentiert, bin aber noch nicht darüber hinausgekommen. Ich bin nicht dazu gekommen, nach einer formellen Dokumentation der Unterschiede zu suchen ...
Sven Slootweg
3
Nun, hier sind die Hauptunterschiede zwischen Node-Webkit und Atom-Shell, die vom Atom-Shell-Team github.com/atom/atom-shell/blob/master/docs/development/… beschrieben wurden .
Grab
2
Wie wäre es mit dem Elefanten im Raum: Debuggen. Ich habe nw.js verwendet und festgestellt, dass das Debuggen bei der Verwendung der Linux-Plattform für die Entwicklung ziemlich mangelhaft ist. Für die Entwicklung großer Anwendungen ist das Debuggen eine wichtige Funktion von IMO. Können wir der Liste der gewünschten Funktionen, mit denen gesprochen werden soll, das Debuggen hinzufügen?
Timothy C. Quinn
@ JavaScriptDude Danke, das habe ich der Liste hinzugefügt.
Sven Slootweg

Antworten:

42

Ich habe vor ungefähr zwei Monaten ähnliche Nachforschungen angestellt und mich am Ende für das Node-Webkit entschieden. Der größte Vorteil von Node-Webkit ist Node.js und Npm. Die Paketverwaltung von npm ist wirklich nett und der Knoten hat den Dateisystemzugriff gut gemacht.

Brackets-Shell sah interessant aus, aber abgesehen von einer netten IDE habe ich nicht wirklich verstanden, was diese so gut oder besser gemacht hat als die anderen. Sie sind sich sehr klar darüber, dass "die Brackets-Shell nur für das Brackets-Projekt gepflegt wird", dass mir Schreie davonlaufen.

https://github.com/adobe/brackets-shell#overview

Atom-Shell scheint in letzter Zeit aktiv zu sein, aber es scheint Klammern insofern sehr ähnlich zu sein, als sie wirklich schreiben und Editor / IDE, die zufällig an eine Webkit-Laufzeit angehängt sind. Es basiert auch auf node.js. Dieser hat den Nachteil, dass es schwierig ist, online nach Dingen zu suchen, ohne an Ihre Chemie in der Mittelschule erinnert zu werden.

Ich möchte wirklich keinen neuen Editor, und die meisten Programmierer haben bereits ihren Favoriten. Für die eigentliche Anwendungsentwicklung funktionieren sie ziemlich gleich und sollten es auch, da sie alle das Webkit verwenden. Sie schreiben im Grunde 90-95% davon wie eine Website und beschäftigen sich dann mit den nativen Teilen und einigen Konfigurationen.

Diese Dinge gelten für alle drei Plattformen - läuft unter Windows-, Mac- und Linux-Sprachunterstützung - HTML5, CSS3 und Javascript: Da sie Javascript ausführen, können Sie nahezu jede gewünschte Bibliothek / jedes gewünschte Framework herunterladen und ausführen.

Die große Einschränkung beim Webkit ist die Codec-Unterstützung. In der Regel treten Probleme mit nicht kostenlosen Video-Codecs auf, es sei denn, Sie erstellen die DLL / so neu, um sie zu unterstützen. Zum Beispiel spielt das mitgelieferte Node-Webkit kein MP4-Video ab.

John W. Clark
quelle
Könnten Sie näher erläutern, ob es Unterschiede in Bezug auf die MP4-Wiedergabe in Klammern-Shell und Atom-Shell gibt? Aus Ihrer Antwort geht nicht hervor, ob dies in den meisten WebKit-Distributionen oder nur im Node-Webkit eine Eigenart ist.
Sven Slootweg
Die MP4-Wiedergabe ist ein Problem, das ein Webkit-Problem darstellt. Sie müssen sich daran erinnern, dass das Webkit im Herzen wirklich aus Chrom besteht. Wenn die AV-Technologie nicht offen und kostenlos ist, wird sie nicht sofort unterstützt. Die Standardantwort ist, ffmpegsumo zu ersetzen / neu zu erstellen. Das Ersetzen durch eines aus Ihrer aktuellen Chrome-Installation scheint ziemlich gut zu funktionieren.
John W. Clark
1
Es ist einfach so, dass Brackets bracket-shellund Atom darauf aufgebaut sind atom-shell, aber Sie können jeden Editor oder jede IDE Ihrer Wahl verwenden, um Code mit ihnen zu erstellen. Ich denke, was das OP will, sind mehr die technischen Unterschiede zwischen den 3. Es wäre schön, so etwas wie TodoMVC in den 3 laufzeitähnlichen Umgebungen zu sehen.
Ehtesh Choudhury
@SvenSlootweg Bei der Codec-Unterstützung geht es mehr um die Bibliotheken, die mit dem von Ihnen verwendeten Webkit verwendet werden. Alle drei verwenden Chromium als Webkit-Basis, sodass sie alle dieselben Codec-Probleme haben und auf dieselbe Weise gelöst werden können.
John W. Clark
40

Ich habe in den letzten Tagen mit Atom-Shell gespielt und ich liebe es bis jetzt.

Das Beste daran ist, dass es von GitHub unterstützt wird. Dies sollte es Ihnen ermöglichen, sich langfristig auf der Plattform zurechtzufinden, insbesondere wenn es eine große Fangemeinde hat. Möglich wird dies auch durch direkte Verbesserungen von Node.j dank eines Vertrags mit StrongLoop , einem wichtigen Mitwirkenden von Node.j (sie behaupten, mehr Node.js Kernentwickler zu beschäftigen als jedes andere Unternehmen, sogar Joyent).

Ich fand es auch ziemlich bequem, loszulegen. Ich brauchte ungefähr einen Tag, um die Struktur zu lernen und meinen ersten Proof of Concept zum Laufen zu bringen. Sehr cool.


Spiegelstriche:

  • Plattformunterstützung: Windows, Linux, Mac OSX ( Weitere Informationen hier )
  • Unterstützung für Sprachfunktionen : HTML5, CSS3, JS über Chromium - bisher keine Probleme, aber ich habe das Video nicht speziell getestet.
  • Native Funktionen: Native App-Menüs, Taskleistenunterstützung, globale Hotkeys, Protokollhandlerunterstützung (die ich bisher gesehen habe)
  • Erweiterbarkeit: Hervorragende Node.js-Integration. Sowohl der Client als auch der Server können Node.js-Module und -Natives "benötigen". Ich habe auch erfolgreich Bower- Bibliotheken (inkl. JQuery) ohne Probleme getestet .
  • Architektur: In den anderen Punkten abgedeckt, aber im Allgemeinen ist es sehr glatt.

Update (25.11.14): Ich habe noch keinen offiziellen Anwendungsfall für Atom-Shell gefunden, aber ich habe damit ein paar kleine Apps für meinen eigenen Gebrauch erstellt. Die komplexeste ist eine App, die zieht Meine Zeit protokolliert von meiner PM-Software und erstellt Paypal-Rechnungen.

Meine Meinung zur Plattform bleibt positiv. Es ist ziemlich großartig.

In meiner Zeitrechnungs-App habe ich erfolgreich die Dashboard-Beispielvorlage von Bootstrap 3 und einige Knotenmodule (Bluebird, Paypal SDK, Teamwork PM Client) eingebracht , um eine leicht komplexe App zu erstellen. Es hat ein paar Tage gedauert und macht seinen Job gut.

Ich kann mir wirklich nichts Negatives über Atom-Shell vorstellen, das solide, stabil, schnell und einfach zu codieren ist. Ich hoffe das hilft jemandem.

Luke Chavers
quelle
Können Sie insbesondere die Unterschiede zum Node-Webkit erläutern? Soweit ich das beurteilen kann, werden alle (die meisten?) Dieser Punkte auch vom Node-Webkit angeboten, aber ich bin mir nicht sicher, ob mir möglicherweise etwas fehlt.
Sven Slootweg
Hallo Luke, ist es möglich, die Atom-Shell-Anwendung selbst zu aktualisieren ...?
Munish Kapoor
@SvenSlootweg Entschuldigung, ich habe Ihren Kommentar von vor ein paar Monaten verpasst. Leider bin ich mit Node-Webkit nicht vertraut und konnte die beiden nicht effektiv vergleichen. Aber ich habe diesen StrongLoop-Artikel gelesen , der zumindest darauf hinweist, dass Atom-Shell Neuland betreten hat. : \
Luke Chavers
@ MunishKapoor Für die Entwicklung? Sie können die neueste Version herunterladen. Ich benenne das alte Atom-Verzeichnis mehr oder weniger um und ersetze es durch das neue. Sie haben vielleicht einen pfiffigen Prozess wie "npm update" - aber ich habe ihn nicht untersucht. Für die Aktualisierung Ihrer App + Atom-Shell auf dem Client denke ich nicht, dass sie dies direkt (überhaupt) ansprechen, und erwarte vermutlich, dass Sie dafür ein Installationsprogramm oder eine andere externe Plattform verwenden. Ich fand diesen Artikel in ihren Dokumenten jedoch interessant.
Luke Chavers
1
@Moonwalker Ja, es wird eine App namens " Asar " zum Verpacken verwendet. (siehe: "Anwendungsverpackung" ). Ich habe auch gerade diesen Node-Webkit / Atom-Shell-Vergleich gefunden .
Luke Chavers
22

Neben der vollständigen Unterstützung von Webstandards unterstützt NW.js eine Liste nicht standardmäßiger Funktionen für die native App-Entwicklung, darunter:

Im Wiki gibt es noch viel mehr zu sehen, einschließlich Menü, Fach usw.

Roger Wang
quelle
3
+1 im Kioskmodus Roger. Ich kann sehen, dass dies eine Funktion ist, die ich in Zukunft verwenden werde. Hoffentlich verbessern sich die Debugging-Funktionen, damit ich auf nw.js bleiben kann. Im Moment denke ich jedoch ernsthaft darüber nach, für eine Weile auf Atom Electron umzusteigen, um das Wasser zu testen. Ich fand das Debuggen in nw.js etwas mangelhaft.
Timothy C. Quinn
Ich bin ein bisschen besorgt über die Aufnahme von "Schutz der JS-Quelle" dort - es ist in der gleichen Klasse wie DRM, in dem Sinne, dass es nicht funktioniert. Es "schützt" nur vor denen, gegen die Sie zunächst nicht "schützen" mussten. Scheint nicht etwas zu sein, das mir als Feature beworben werden sollte.
Sven Slootweg
1
Es ist nicht wie bei DRM for Web - JS-Programmierer sollten in der Lage sein, alles zu tun, was C ++ - Programmierer können, einschließlich des Kompilierens des Quellcodes zu Maschinencode, wenn sie native Anwendungen entwickeln.
Roger Wang
@ JavaScriptDude meinst du die devtools? In der nächsten Version (0.13) wird die Erfahrung fast dieselbe sein wie im Chrome-Browser.
Roger Wang
@ Roger. Entschuldigung für die verspätete Antwort. Ja, Devtools. Ich habe festgestellt, dass die folgenden Einschränkungen vorhanden sind, von denen einige wahrscheinlich in den devtools selbst vorhanden sind: 1) Kein Debuggen neuer Windows gestartet. 2) Remote-Debugging hat nie funktioniert. 3) Unfähigkeit, Haltepunkte abzurufen, Variablen und Quellen zu öffnen (jedes Mal, wenn die App neu gestartet wird, werden alle Einstellungen gelöscht) 4) (das wahre Problem) Unfähigkeit, mit require () geladenen Code zu debuggen.
Timothy C. Quinn
10

Ich arbeite seit einiger Zeit mit Brackets-Shell. Hier sind einige meiner Ergebnisse:

  • Die Brackets-Shell wird hauptsächlich als Shell unter dem Brackets-IDE-Projekt entwickelt, das Projekt kann jedoch jede Webanwendung ausführen. Sie müssen es nur auf Ihre eigene HTML-Seite verweisen. Clint Berry hat ein hervorragendes Tutorial dazu geschrieben: http://clintberry.com/2013/html5-desktop-apps-with-brackets-shell/
  • Das Projekt wird von Adobe unterstützt und ist sehr aktiv
  • Die Dokumentation könnte besser sein

  • Plattformunterstützung Sie unterstützen Windows, Mac und Linux. Ein Installationspaket kann ebenfalls erstellt werden. Ich habe es nur auf Win und Mac getestet, es funktioniert großartig.

  • Funktionsunterstützung html5, css3, js. HTML5-Video funktioniert nicht sofort, ist aber sehr einfach zu aktivieren (standardmäßig wird die Datei ffmpegsumo.dll nicht in das Installationsprogramm kopiert, wenn Sie das Skript zum Kopieren ändern, funktioniert es).
  • Menüleiste mit nativen Funktionen , 'Datei öffnen mit', Dateisystemzugriff. Ich verwende keines davon, da ich nur die Kommunikation mit dem Knotenprozess benötige.
  • Erweiterbarkeit Ein NodeJS ist integriert, und Sie können über Ihre Webanwendung mit Node kommunizieren. Auf diese Weise können Sie mit node auf das Dateisystem usw. zugreifen.
  • Architektur Das Projekt ist gut eingerichtet und bietet eine gute Trennung zwischen dem Shell-Projekt und Ihrer eigenen Web-App. In Ihrer eigenen Anwendung steht ein globales Appshell-Objekt zur Verfügung, mit dem Sie auf die Klammerfunktionen zugreifen können (Dateisystemzugriff, Kommunikation mit dem Knotenprozess, ...).
Karel Braeckman
quelle
6
Das, was mich dazu brachte, mich von Brackes-Shell fernzuhalten, war ihre eigene Übersicht. github.com/adobe/brackets-shell "Hinweis: Die Brackets-Shell wird nur für das Brackets-Projekt verwaltet. Obwohl einige Leute definitiv Erfolg damit hatten, sie als App-Shell für andere Projekte zu verwenden, stellen wir keine offiziellen zur Verfügung Unterstützung dafür und wir haben nicht viel Arbeit geleistet, um die App-Shell einfach wiederverwendbar zu machen. Viele Leute werden es wahrscheinlich einfacher finden, ein Projekt wie das Node-Webkit zu verwenden, das von Natur aus allgemeiner ist. "
John W. Clark
5

Eine Sache zu beachten (wenn Sie sich interessieren) ist, dass das Electron Windows Vista offiziell nicht unterstützt. Der Marktanteil von Vista liegt zwischen OSX 10.9 und 10.10 (beide werden von Electron vollständig unterstützt). Vista wird auch bis 2017 von Microsoft unterstützt.

NW.js funktioniert sowohl unter Vista als auch unter OSX 10.9+ einwandfrei. NW.js funktioniert unter Ubuntu, Debian, Zorin, Manjaro, Arch und den meisten anderen Debian-basierten Linux-Betriebssystemen. Electron hat PRs abgelehnt, Ubuntu-spezifische Fehler auf ihrer Plattform zu beheben.

NW.js funktioniert auch in XP. Derzeit sind 18% des Marktes noch auf XP. Wenn Ihre Desktop-Anwendung also allgemeiner ist oder Zugriff auf die späten Anwender unter XP haben soll, sind Sie mit NW.js (0.14.7) wahrscheinlich besser dran, da Electron nur Win 7 und höher unterstützt.

Wenn Sie NW.js 0.12.3 verwenden, können Sie auch OSX 10.6+ und sehr alte Versionen von Debian-basierten Linux-Betriebssystemen wie Ubuntu und Win XP + unterstützen. Es wird jedoch empfohlen, spezielle Builds nur für diese Legacy-Systeme durchzuführen und die neueren Versionen von NW.js für neuere Betriebssysteme zu verwenden.

Jaredcheeda
quelle
1
Chrome hat den Support nicht beendet, nachdem MS dies getan hat - der Support wurde bis Ende 2015 verlängert - chrome.blogspot.com/2015/04/…
Karol Klepacki
Das Elektron (Atom-Shell) läuft nicht auf RHEL 6.6 und darunter, und der Quellcode kann auf diesen Distributionen nicht kompiliert werden.
Michael Kruglos
Auf der anderen Seite kommt Electron mit Mac App Store-kompatiblen Builds und unterstützt
Edakos
Sie können nw-builder verwenden , um die MAS-Versionen zu erstellen. Es gibt Arm für NW.js baut auch.
Jaredcheeda