Większość ludzi kojarzy JavaScript głównie z tworzeniem stron internetowych. Ostatnio pojawia sie też coraz więcej aplikacji backendowych i mikroserwisów napisanych w NodeJs. Ale czy wiecie, iż możemy również tworzyć aplikacje desktopowe? Okazuje się, iż JavaScript jest językiem w którym da się napisać prawie wszystko. Co więcej możecie korzystać z takiej aplikacji nie wiedząc o tym. Więc jak napisać własną aplikację desktopową?
Electron
W świecie JavaScriptu mamy biblioteki już chyba do wszystkiego. Znajdziemy też bibliotekę, która pozwala nam stworzenie i uruchomienie programu desktopowego. Wbrew pozorom nie jest to nowa biblioteka ponieważ pierwszy release (według oficialnej strony) miał miejsce 6 lat temu i od tego momentu jest ciągle aktywnie rozwijana. W świecie JS to jest naprawdę dużo co czyni biblotekę wartą objerzenia i wypróbowania. Oczywiście jeżeli nigdy o niej nie słyszeliście to możecie sądzić, iż Electron nadaje się jedynie do zabawy a nie do praktycznego zastosowania. Nic bardziej mylnego - oficjalna strona podaje, iż powstało już 759 aplikacji, czyli da się napisac produkcyjną aplikację. A jak wygląda z wydajnością i popularnością takich bibliotek - to, iż jest ich dużo to nie znaczy, iż ktokolwiek z nich korzysta? Ostatni argument, który powinien was przekonać, żeby dać szansę tej bibliotece to obecność na liście aplikacji takich programów jak: Slack, Visual Studio Code, Skype, Github Desktop czy też GitKraken. Skoro tacy gracze piszą w tym swoje aplikacje to znaczy, iż da się je pisać w sposób wydajny oraz przyjemny w użytkowaniu dla użytkownika.
Pierwsze kroki w Electronie
Skoro doszliście aż tutaj to znaczy, iż was przynajmniej odrobinę zaciekawiłem i zainteresowałem tematem. Skoro tak to możemy stworzyć naszą pierwszą aplikację z wykorzystaniem tej biblioteki. Pierwsze co musimy zrobić to dodać bibliotekę electron do naszego projektu:
Następnie potrzebujemy przynajmniej dwóch plików:
- index.html - tutaj zdefiniujemy jak będzie wyglądała aplikacja od strony UI
- main.js - plik, odpowiedzialny za główny wątek aplikacji, utworzy nam okienko oraz zapewnia interakcję z systemem
Tak więc po kolei - na początek plik związany z wyglądem czyli index.html
Tutaj nie ma co tłumaczyć - zwykły plik html, który wyświetla napis Hello World. Zobaczmy co mamy w drugim:
Tutaj już można powiedzieć nieco więcej. Na pierwszy ogień funkcja createWindow. Tworzy ona okno naszej aplikacji o zdefiniowanych przez nas rozmiarach. Następnie do tego okna jest ładowany nasz plik *.html czego skutkiem będzie wyświetlenie go w aplikacji. Dodatkowo wykorzystujemy obiekt app, który jest odpowiedzialny za kontrolę cyklu życia naszej aplikacji. To co potrzebujemy zawsze to zdarzenie dotyczące gotowości naszej aplikacji - służy nam do tego zdarzenie ready. Dopiero w momencie gdy wszystko jest gotowe możemy stworzyć okno zawierające naszą treść.
Teraz musimy uruchomić naszą aplikację. W tym celu musimy wyedytować nasz plik package.json - po pierwsze musimy dodać do sekcji scripts taki wpis "start": "electron ." oraz ustawić nasz plik main.js jako główny skrypt - "main": "main.js". A jak wygląda efekt finalny?
Widzimy tutaj u góry menu narzędziowe. Jest ono przydatne podczas tworzenia aplikacji ponieważ pozwala na przykład na pokazywanie i ukrywanie DevTools. Ale możemy nie chcieć tego w końcowej aplikacji. Aby się tego pozbyć musimy dodać parametr frame: false podczas tworzenia okna
React + Electron
Wygląda fajnie ale tworzenie interfejsu użytkownika od zera może być uciążliwe. Oczywiście od czego mamy biblioteki takie jak React, które nam w tym pomagają? Tylko jak połączyć te obie biblioteki by działało to zarówno w środowisku deweloperskim jak i produkcji? jeżeli zaczynamy nowy projekt to najprościej najpierw stworzyć go przy pomocy create-react-app i następnie doinstalować osobno electron. Tylko jak teraz przekazać plik *.html, który ma zostać wyświetlony? Przecież nie będziemy po każdej zmianie budować całej aplikacji bo ani to wygodne ani efektywne. Musimy zmienić funkcje loadFile na loadUrl - teraz możemy podać url do aplikacji z React.
Musimy tylko pamiętać, żeby uruchomić najpierw aplikację React'a a dopiero potem tą desktopową. Tyle wystarczy by uzyskać następujący efekt końcowy. Co istotne w momencie gdy będziemy edytować nasz kod React'a to odświeżanie będzie działać poprawnie również w aplikacji desktopowej.
I jak wam podoba się pomysł tworzenia aplikacji desktopowych w ten sposób? Przy odpowiednim tworzeniu kodu moglibyśmy prawie za darmo mieć do naszej aplikacji webowej również klienta desktopowego. Pisaliście kiedyś aplikacje w ten sposób. jeżeli chcielibyście kolejnych postów dotyczących tej biblioteki oraz jak tworzyć w tym aplikacje dajcie znać w komentarzach :)