NW.js: Programm erstellen und testen, 2. Teil

Windows 10 64-Bit, Stable nwjs-sdk-v0.15.4-win-x64

Wenn ich alle Dateien meiner Projekte ins Verzeichnis von nw.exe kopiere mülle ich dieses Verzeichnis ja völlig voll!!! Kann man das Verzeichnis von nw.exe und meine Projektverzeichnisse nicht trennen?

Klar geht das. Am einfachsten mit einer Batch-Datei (auf Deutsch: Stapelverarbeitungsdatei). NW.exe kann als Parameter der Pfad zu package.json übergeben werden. Im 1. Schritt holt man sich dazu den absoluten Pfad zu NW.exe (dazu mit dem Explorer das Verzeichnis, in dem sich NW.exe befindet öffnen und den Pfad oben aus der Pfadleiste kopieren) und als Parameter den Pfad zu package.json in die Batch-Datei. Bei mir sieht das dann so aus:

                            C:\Users\Jürgen\Desktop\nwjs-sdk-v0.15.4-win-x64\nw.exe C:\Users\Jürgen\Desktop\Sonstiges\nw\test1
                        

NW.exe befindet sich bei mir also im Ordner nwjs-sdk-v0.15.4-win-x64, welcher auf dem Desktop liegt. Mein zu testendes Programm ist im Ordner Sonstiges unter nw\test1 ebenfalls auf dem Desktop zu finden.

Umlaute in Batch-Dateien:

Wie zu sehen ist enthalten beide Pfade Umlaute. Weiter oben hatte ich geschrieben, dass für das Schreiben von HTML, CSS und JS die Kodierung im Editor auf UTF-8 eingestellt werden soll. Wird diese Kodierung in Batch-Dateien verwendet sieht das im Fenster der Eingabeaufforderung („DOS-Fenster“) so aus:

DOS Box Umlautfehler
Umlautfehler in DOS-Box bei Verwendung von UTF-8

Wie an den rot markierten Stellen zu erkennen ist werden die Umlaute nicht korrekt dargestellt und der Befehlsinterpreter kann den angegebenen Pfad nicht finden. Mit anderen Worten: Der Windowsbefehlsinterpreter cmd.exe verwendet eine andere Zeichenkodierung, also nicht UTF-8.

Wat nu? Im Menü Kodierung - Zeichensatz - Westeuropäisch - OEM 850 einstellen, den Hinweis bejahen, die jetzt falsch dargestellten Umlaute korrigieren und gut is, wie man sieht:

DOS Box Umlautfehler behoben
Umlautfehler in DOS-Box durch Verwendung von OEM 850 behoben

Diese Batch-Datei wird beendet (und somit auch das DOS-Fenster geschlossen) wenn das NW.js-Programm beendet wird.

Woher weiß eigentlich die HTML-Datei, dass UTF-8 als Zei­chen­ko­die­rung verwendet wird?

Oh, da wurde wohl etwas vergessen, nämlich das Meta-Tag <meta charset=​"utf-8"> für die Zeichenkodierung. Das gehört gleich in die 1. Zeile des Kopfes der HTML-Datei.

Hmm, ist ja schön und gut aber nun muss ich wegen der Pfadangabe zu package.json die Batch-Datei jedes Mal anpassen, wenn ich ein anderes Entwicklungsverzeichnis benutze ...

Stimmt, das geht auch besser. Davon ausgehend, dass die Batch-Datei immer im Verzeichnis von package.json liegt kann die vom Befehlsinterpreter zur Verfügung gestellte Systemvariable %0 verwendet werden. Diese gibt den Namen und kompletten Pfad der Batch-Datei aus. Da aber nur der Laufwerksbuchstabe und der Pfad benötigt wird werden die Variablenmodifizierer d (drive) und p (path) eingefügt. Damit die Variablenmodifizieer als solche erkannt werden muss ihnen das Zeichen ~ (Tilde) vorangestellt werden. Also so:

                            C:\Users\Jürgen\Desktop\nwjs-sdk-v0.15.4-win-x64\nw.exe %~dp0
                        

Damit kann jetzt für jedes Projekt ein neues Verzeichnis an einem beliebigen Speicherort angelegt und trotzdem immer die selbe Batch-Datei zum Aufruf von NW.exe verwendet werden. Durch Modifikation des Pfades zu NW.exe können sogar problemlos unterschiedliche Versionen von NW.exe parallel verwendet werden.

Ist ja lästig, da muss ich ja die Batch-Datei nach jeder Programmmodifikation neu starten.

Nö. Einfach per Rechtsklick im laufenden Testprogramm dessen Kontextmenü aufrufen und App neu laden anwählen. Schon wird das Textprogramm (neuerdings wieder wie früher App (Application) genannt) mit den Änderungen neu gestartet.

Aber die DevTools (Developer Tools, also die Ent­wick­lungs­werk­zeuge) muss ich trotzdem jedes Mal wieder neu öffnen ...

Nö, das kann man auch automatisieren. Dazu einfach require('nw.gui').Window.get().showDevTools(); zwischen Script-Tags in der otto.html am Ende vor </body> eingeben:

                            <!DOCTYPE html>
                            <html>
                                <head>
                                    <meta charset="utf-8">
                                    <title>Mein 1. Programm in NW.js</title>
                                </head>
                                <body>
                                    <h1>Hallo, ich bin's!</h1>
                                    <script>
                                        require('nw.gui').Window.get().showDevTools();
                                    </script>
                                </body>
                            </html>
                        

Aaaaber ... das ist gar nicht nötig. Wer genau aufpasst hat hat gemerkt, dass, wenn das Fenster mit den DevTools beim Beenden des NW.js-Programms offen war beim erneuten Starten automatisch wieder geöffnet wird :-)

Oben hatten wir ja schon Probleme mit Umlauten in Pfaden. Wie steht's da eigentlich mit Leerzeichen in Pfaden?

Radio Eriwan antwortet: Im Prinzip ja. Und zwar dann, wenn der Pfad nicht als URL behandelt wird. Und dann auch nur, wenn der Pfad in Anführungszeichen gesetzt wird, sonst wird der Teil nach dem Leerzeichen als Parameter verstanden.

Urmpf ... was heißt das jetzt im Fall von NW.js?

Ganz einfach. Der Pfad zu package.json (also der Teil, der in %~dp0 enthalten ist) darf keine Leerzeichen enthalten. Sonst gibt es die folgende Fehlermeldung mit abgeschnittenem Pfad:

Fehler Pfad abgeschnitten
Fehler: abgeschnittener Pfad (korrekt: ...\nw\test2 file dialogs)

Das gilt auch, wenn dieser Pfad in Anführungszeichen geschrieben wird. Dann ändert sich die Fehlermeldung in:

Fehler Pfad unverständlich
Fehler: Pfad unverständlich

Lösung: Wie bei URLs üblich kann das Leerzeichen durch %20 ersetzt werden. Das sieht dann im Explorer ein bisschen ungewohnt aus funktioniert aber. Oder es wird ausnahmsweise auf Leerzeichen in Pfaden verzichtet.

Ihre Meinung? Schreiben Sie mir eine Email . Keine Angst, Ihre Email wird nicht veröffentlicht. Ich erlaube mir aber, auf Ihre Email zu antworten, schreiben Sie mir also nicht, wenn Sie nicht mit mir kommunizieren möchten. Danke.

Übersicht aller Artikel zu NW.js
NW.js: Programm erstellen und testen, 1. Teil