Quali sono le differenze funzionali tra NW.js, Brackets-Shell ed Electron?


151

Ora che TideSDK è effettivamente morto, ho cercato alternative "wrapper" per eseguire applicazioni HTML / CSS / JS come applicazioni desktop autonome. Le tre opzioni praticabili che ho incontrato finora sono NW.js (precedentemente node-webkit), brackets-shell ed Electron (precedentemente atom-shell).

Il problema è che non sembra esserci un confronto sufficientemente completo tra i tre in termini di set di funzionalità, compatibilità, ecc. Spero di trasformarlo in un filo canonico più o meno sulle differenze (oggettive) tra i tre, in particolare per quanto riguarda:

  • Supporto piattaforma ; sistemi operativi, dipendenze, ecc.
  • Supporto delle funzionalità linguistiche , per quanto riguarda HTML5, CSS3 e JavaScript. Pensa a cose come "funziona il video HTML5 e, in caso affermativo, quali codec sono disponibili?"
  • Funzionalità extra non standard , come icone nella barra delle applicazioni, notifiche popup e barre dei menu renderizzate dal sistema operativo.
  • Estensibilità ; per esempio. possibilità di "collegare" il codice nativo, parlare con Node.js e così via.
  • Architettura ; in particolare le differenze architettoniche che incidono sull'uso quotidiano come sviluppatore.
  • Debug ; inclusi strumenti di sviluppo, compatibilità con strumenti di uso comune come node-inspector, ecc.
  • ... e così via.

Quali sono le differenze oggettive e tecniche che contano quando si fa una scelta tra loro come sviluppatore di applicazioni?


Nel frattempo hai avuto fortuna a guardare le differenze? Potrei scavare questo fine settimana
Stefan,

@stefan Non ancora, no: / Ho sperimentato un po 'con node-webkit in senso pratico, ma non sono ancora andato oltre. Non ho cercato la documentazione formale delle differenze ...
Sven Slootweg

3
Bene, ecco le principali differenze tra node-webkit e atom-shell delineate dal team atom-shell, github.com/atom/atom-shell/blob/master/docs/development/… .
sepolto dal

2
Che ne dici di Elephant in the Room: Debugging. Ho usato nw.js e ho scoperto che il debug è piuttosto carente quando si utilizza la piattaforma Linux per lo sviluppo. Per sviluppare applicazioni di grandi dimensioni, il debug è una caratteristica fondamentale dell'IMO. Possiamo aggiungere il debug all'elenco delle funzionalità desiderabili con cui parlare?
Timothy C. Quinn,

@JavaScriptDude Grazie, l'ho aggiunto all'elenco.
Sven Slootweg,

Risposte:


42

Ho fatto ricerche simili circa due mesi fa e alla fine sono andato con node-webkit. Il più grande vantaggio di node-webkit è node.js e npm. La gestione dei pacchetti di npm è davvero piacevole e il nodo ha ben fatto l'accesso al filesystem.

Le parentesi graffe sembravano interessanti, ma a parte un IDE carino, non ho davvero capito cosa lo rendesse buono o migliore degli altri. Sono molto chiari sul fatto che "Il brackets-shell è gestito solo dal progetto Brackets", che le urla scappano via da me.

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

Atom-shell sembra essere recentemente attivo, ma sembra molto simile a parentesi in quanto stanno davvero scrivendo e editor / IDE che sembra essere semplicemente collegato a un runtime webkit. Inoltre è basato su node.js. Questo ha il rovescio della medaglia di essere difficile cercare cose online senza ricordare la chimica della scuola media.

Non voglio davvero un nuovo editor e la maggior parte dei programmatori ha già il suo preferito. Per lo sviluppo effettivo delle applicazioni, funzionano praticamente allo stesso modo e dovrebbero, poiché usano tutti webkit. Fondamentalmente scrivi il 90-95% di esso come un sito Web, quindi gestisci le parti native e alcune configurazioni.

Queste cose sono vere per tutte e tre queste piattaforme - funziona su supporto linguistico Windows, Mac e Linux - HTML5, CSS3 e Javascript: poiché eseguono javascript puoi scaricare ed eseguire quasi tutte le librerie / framework che desideri.

Il grande avvertimento sul webkit è il supporto del codec. In genere si verificano problemi con i codec video non liberi, a meno che non si ricostruisca la DLL / così per supportarli. Ad esempio il nodo webkit fornito non riprodurrà video mp4.


Potresti approfondire se c'è qualche differenza riguardo alla riproduzione di MP4 in parentesi-shell e atomo-shell? Dalla tua risposta non è chiaro se si tratti di una stranezza nella maggior parte delle distribuzioni WebKit o solo in node-webkit.
Sven Slootweg,

La riproduzione di MP4 è un problema è un problema di webkit. Devi ricordare che il webkit ha davvero a cuore il cromo e, a meno che la tecnologia AV non sia aperta e libera, non la supportano immediatamente. La risposta standard è sostituire / ricostruire ffmpegsumo. Sostituirlo con uno della tua attuale installazione di Chrome sembra funzionare abbastanza bene.
John W. Clark,

1
Capita solo che le parentesi siano costruite bracket-shelle Atom sia costruito atom-shell, ma puoi usare qualsiasi editor o IDE di tua scelta per creare codice con loro. Penso che ciò che l'OP vuole sia più sulle differenze tecniche tra i 3. Sarebbe bello vedere qualcosa come TodoMVC nei 3 ambienti simili a runtime.
Ehtesh Choudhury,

@SvenSlootweg il supporto del codec riguarda più le librerie utilizzate con il webkit che si sta utilizzando. Tutti e tre utilizzano Chromium come base di webkit, quindi hanno tutti gli stessi problemi di codec e possono essere risolti allo stesso modo.
John W. Clark,


40

Ho suonato con Atom-Shell negli ultimi giorni e lo adoro finora.

La parte migliore è che è supportato da GitHub .. che dovrebbe permetterti di sistemarti nella piattaforma a lungo termine, specialmente se guadagna un grande seguito. Ciò è reso possibile anche dai miglioramenti diretti di Node.js per gentile concessione di un contratto con StrongLoop , che è uno dei principali collaboratori di Node.js (dichiarano di impiegare più sviluppatori core di Node.js rispetto a qualsiasi altra azienda, persino Joyent).

Ho anche trovato abbastanza comodo iniziare. Mi ci è voluto circa un giorno per imparare la struttura e ottenere la mia prima prova del concetto in esecuzione. Molto bello.


Elenco puntato:

  • Supporto piattaforma: Windows, Linux, Mac OSX ( maggiori informazioni qui )
  • Supporto delle funzionalità linguistiche: HTML5, CSS3, JS tramite Chromium - finora, zero problemi, ma non ho testato video in modo specifico.
  • Funzionalità native: menu delle app native, supporto della barra delle applicazioni, tasti di scelta rapida globali, supporto del gestore dei protocolli (che ho visto finora)
  • Estensibilità: eccellente integrazione di Node.js, sia il client che il server possono "richiedere" moduli e nativi Node.js. Ho anche testato con successo le librerie Bower (incluso jQuery) senza problemi.
  • Architettura: coperto negli altri punti, ma in generale è molto liscio.

Aggiornamento (25/11/14): non ho ancora trovato il caso d'uso per Atom-Shell a qualsiasi titolo ufficiale, ma l'ho usato per creare alcune piccole app per il mio uso, la più complessa è un'app che estrae il mio tempo registra dal mio software PM e crea fatture Paypal.

La mia opinione sulla piattaforma rimane positiva. È davvero fantastico.

Nella mia app per la fatturazione del tempo ho portato con successo il modello di esempio di Dashboard di Bootstrap 3 e alcuni moduli nodo (bluebird, Paypal SDK, Teamwork PM Client) per creare un'app leggermente complessa. Mi ci sono voluti alcuni giorni e fa bene il suo lavoro.

Non riesco davvero a pensare a qualcosa di negativo da dire su Atom-Shell, solido, stabile, veloce e facile da codificare. Spero che questo aiuti qualcuno.


Puoi approfondire le differenze con il nodo webkit in particolare? Per quanto ne so, tutti (la maggior parte?) Di questi punti sono offerti anche da node-webkit, ma non sono sicuro che ci possa essere qualcosa che mi manca.
Sven Slootweg,

ciao luke è possibile aggiornare l'applicazione atom-shell da sola ...?
Munish Kapoor,

@SvenSlootweg Spiacente, ho perso il tuo commento di qualche mese fa; Sfortunatamente non sono esperto di nodo-webkit e non sono riuscito a confrontare i due in modo efficace. Ma ho letto questo articolo di StrongLoop , che indica almeno che Atom-Shell ha aperto nuove strade . : \
Luke Chavers il

@MunishKapoor Per lo sviluppo? Puoi scaricare l'ultima versione .. Ho più o meno semplicemente rinominato la vecchia directory atom e sostituirla con la nuova. Potrebbero avere un processo snazzy come "npm update" - ma non l'ho studiato. Per aggiornare la tua app + atom shell sul client, non penso che si occupino direttamente (per niente) e presumibilmente mi aspetto che tu usi un installer o un'altra piattaforma esterna per questo. Ho trovato interessante questo articolo nei loro documenti .
Luke Chavers,

1
@Moonwalker Sì, utilizza un'app chiamata " Asar " per il packaging. (vedi: "Imballaggio dell'applicazione" ). Ho anche trovato questo confronto Node-Webkit / Atom-Shell .
Luke Chavers,

22

Oltre a supportare completamente gli standard Web, NW.js supporta un elenco di funzionalità non standard per lo sviluppo di app native tra cui:

C'è molto altro da vedere nella wiki, tra cui Menu, Vassoio, ecc.


3
+1 in modalità Kiosk Roger. Vedo che si tratta di una funzionalità che userò in futuro. Spero che le funzionalità di debug migliorino in modo da poter rimanere su nw.js, ma in questo momento sto seriamente pensando di passare ad Atom Electron per un po 'per testare le acque. Ho trovato un po 'carente il debug in nw.js.
Timothy C. Quinn,

Sono un po 'preoccupato per l'inclusione di "proteggere la fonte JS" lì - è nella stessa classe di DRM, nel senso che non funziona. "Protegge" solo da coloro per i quali non è necessario "proteggere". Non sembra qualcosa che dovrebbe essere pubblicizzato come una caratteristica per me.
Sven Slootweg,

1
Non è come DRM per il Web: i programmatori JS dovrebbero essere in grado di fare qualsiasi cosa come possono fare i programmatori C ++, inclusa la compilazione del codice sorgente in codice macchina, quando sviluppano applicazioni native.
Roger Wang,

@JavaScriptDude intendi gli devtools? Nella prossima versione (0.13) l'esperienza sarà quasi la stessa del browser Chrome.
Roger Wang,

@Roger. Ci scusiamo per la risposta ritardata. Sì, devtools. Ho scoperto che c'erano le seguenti limitazioni, alcune delle quali sono probabilmente negli stessi devtools: 1) Nessun debug di nuove finestre avviate. 2) Il debug remoto non ha mai funzionato. 3) Impossibilità di richiamare punti di interruzione, guardare variabili e fonti aperte (ogni volta che si riavvia l'app, tutte le impostazioni vengono cancellate) 4) (il vero grande problema) Impossibilità di eseguire il debug del codice caricato con require ().
Timothy C. Quinn,

10

Lavoro con brackets-shell da qualche tempo, ecco alcuni dei miei risultati:

  • brackets-shell è sviluppato principalmente come shell nell'ambito del progetto IDE parentesi, ma il progetto può eseguire qualsiasi applicazione web. Hai solo bisogno di puntarlo alla tua pagina HTML. Clint Berry ha scritto un eccellente tutorial su come fare proprio questo: http://clintberry.com/2013/html5-desktop-apps-with-brackets-shell/
  • Il progetto è supportato da Adobe e ha molte attività
  • La documentazione potrebbe essere migliore

  • supporto piattaforma Supportano Windows, Mac e Linux. È inoltre possibile creare un pacchetto di installazione. L'ho provato solo su Win e Mac, funziona benissimo.

  • supporto funzionalità html5, css3, js. Il video HTML5 non funziona immediatamente, ma è molto facile da abilitare (per impostazione predefinita il file ffmpegsumo.dll non viene copiato nel programma di installazione, se si modifica lo script per copiarlo funzionerà).
  • barra dei menu delle funzioni native , 'apri file con', accesso al file system. Non sto usando nessuno di questi, poiché tutto ciò di cui ho bisogno è la comunicazione con il processo del nodo.
  • estensibilità integrata in nodejs e puoi comunicare con il nodo dalla tua applicazione web. In questo modo, puoi usare il nodo per accedere al filesystem ecc.
  • architettura Il progetto è ben impostato, mantenendo una buona separazione tra il progetto shell e la tua app web in esecuzione al suo interno. Nella propria applicazione, è disponibile un oggetto appshell globale che consente di accedere alla funzionalità parentesi (accesso al filesystem, comunicazione con il processo del nodo, ...).

6
La cosa che mi ha fatto stare lontano da Brackes-shell è stata la loro panoramica. github.com/adobe/brackets-shell "Nota: il brackets-shell è gestito solo per l'uso dal progetto Brackets. Sebbene alcune persone abbiano sicuramente avuto successo nell'usarlo come shell di app per altri progetti, non forniamo alcun ufficiale supporto per questo e non abbiamo fatto un sacco di lavoro per rendere facilmente riutilizzabile la shell dell'app. Molte persone probabilmente troveranno più facile usare un progetto come node-webkit, che è più generico in base alla progettazione. "
John W. Clark,

5

Una cosa da notare (se ti interessa) è che Electron ufficialmente non supporta Windows Vista. La quota di mercato di Vista è circa a metà tra OSX 10.9 e 10.10 (entrambi supportati completamente da Electron). Vista è ancora supportato da Microsoft fino al 2017.

NW.js funziona bene in Vista, così come in OSX 10.9+. NW.js funziona su Ubuntu, Debian, Zorin, Manjaro, Arch e la maggior parte degli altri sistemi operativi Linux basati su Debian. Electron ha rifiutato ai PR di correggere bug specifici di Ubuntu sulla loro piattaforma che è preoccupante.

NW.js funziona anche in XP. Attualmente il 18% del mercato è ancora su XP. Quindi, se l'applicazione desktop è più generica o desidera avere accesso agli utenti finali ancora su XP, probabilmente stai meglio con NW.js (0.14.7) poiché Electron supporta solo Win 7 e versioni successive.

Se usi NW.js 0.12.3 puoi anche supportare OSX 10.6+ e versioni molto vecchie di sistemi operativi Linux basati su Debian come Ubuntu e Win XP +. Si consiglia di eseguire build speciali solo per quei sistemi legacy e di utilizzare le versioni più recenti di NW.js per i sistemi operativi più recenti.


1
Chrome non ha interrotto il supporto dopo che lo ha fatto MS - il supporto è stato esteso alla fine del 2015 - chrome.blogspot.com/2015/04/…
Karol Klepacki

electron (atom-shell) non funziona su RHEL 6.6 e versioni precedenti e il codice sorgente non può essere compilato su quelle distro.
Michael Kruglos,


Puoi usare nw-builder per creare le versioni MAS. Ci sono braccio costruisce per NW.js pure.
Jaredcheeda,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.