Hallo, Habr und seine Bewohner! Ich wollte etwas in HTML und JS formen, damit es Desktop und praktisch ist. Was wird dafür benötigt? Richtig. Node.js und NW.js oder Electron. Mit Blick auf die schwachen Versuche des Holivar NW gegen Electron und das Lesen der Dokumentation von beiden wurde die Entscheidung getroffen, NW.js.
Aber hier ist ein Hinterhalt.
npm i sqlite3
nur die Bibliotheken installiert, die ausgeführt werden können, wenn sie direkt über den Knoten gestartet werden. Und wenn Sie versuchen, das Skript in HTML zu verbinden und dieses HTML in NW.js auszuführen, wird nichts daraus. Google Associates gibt nur ein Rezept für die Aufnahme von SQLite in ein Projekt auf nw.js an, und selbst dieses muss aus dem Cache gezogen werden. Ja, und er ist bereits veraltet. Daher wurden einige Tage damit verbracht, die Probleme zu untersuchen und eine funktionierende Lösung zu finden. Ich frage nach Katze.
Also. Zunächst wurde der Computer "aus dem, was er war" erstellt und Windows 7 x32 mit dem .NET-Paket 4.7.1 (erforderlich für Visual C ++) installiert. Warum 32 Bit? Ich beschloss, klein anzufangen. Wie sich herausstellte, erfordert das Erstellen eines Moduls für x64 keine Ausführung auf einem x64-System.
Dann wurde Node.js Version 10.8.0 installiert, obwohl 10.9.0 bereits am Ende der Experimente erschienen war. Aber dann habe ich beschlossen, sachkundigen Leuten zuzuhören:

Nachdem ich darüber nachgedacht hatte, entschied ich, dass ich es für LTS trotzdem mache, obwohl nicht ganz klar ist, wo alle LTS haben und wo nicht. Er schlug vor, dass Nicht-LTS Beta, Alpha und nächtliche Builds sind.
Obwohl, wie bei jedem Aussteiger, alles in zwei Hälften getan und die folgende Empfehlung erfüllt wurde:
Dokumentationsempfehlung für LTS-ReleasesUnter Windows müssen Sie die Datei ersetzen
<npm-path> \ node_modules \ node-gyp \ src \ win_delay_load_hook.cc mit dem unter
github.com/nwjs/nw.js/blob/nw18/tools/win_delay_load_hook.cc, bevor Module mit node-gyp oder npm installiert werden.
Nun, ich habe diese Datei nicht auf meinem Computer gefunden. Wahrscheinlich, weil ich Node-Gyp nicht installiert habe.
Wir setzen es für den Knoten (es ist absolut notwendig, es über die Befehlszeile mit Administratorrechten zu tun)
npm i -g nw-gyp
In der Tat ist der Ersatzknoten-Gypnw-gyp ist ein Hack auf Node-Gyp, um die spezifischen Header und Bibliotheken von NW.j zu unterstützen.
Weiter - Laden Sie die Visual Studio Community Edition herunter (der aktuelle Link befindet sich leicht in Ihrer bevorzugten Suchmaschine). Zum Zeitpunkt des Schreibens ist die aktuelle Version 2017. Was für uns wichtig ist - sie enthält Build Tools 2015 -, während native Module im Knoten nur mit dieser und weiteren Versionen zusammengestellt werden frisch nicht unterstützen. Laden Sie das Installationsprogramm herunter, starten Sie es und setzen Sie ein Häkchen in die Registerkarte "Einzelne Komponenten" -
Toolbox VC ++ 2015.3 v14.00 (v140) für PC
Das hinzugefügte Windows 8.1 SDK ist ebenfalls erforderlich, daher installieren wir alle drei Punkte. Die Installation in dieser Form führt zu einem Sprung von 2,89 Gigabyte von allem, was Sie benötigen.
Wir gehen weiter - wir schwingen eine Schlange. Und Version 2.7. Standardmäßig in C: \ Python27 installieren.
Und jetzt -
Aufmerksamkeit! Hinterhalt.Standardmäßig ist das Installationsprogramm der Ansicht, dass es nicht erforderlich ist, dem PATH einen Python-Speicherort hinzuzufügen. Daher beseitigen wir dieses Missverständnis in der Installationsphase

Ein ähnlicher Hinterhalt verfolgt viele Entwickler, wenn sie eine Vielzahl von Modulen für einen Knoten erstellen. Und das alles, weil das kleine Unternehmen es auch nicht für notwendig hält, die Wege zu seinen Kreationen vorzuschreiben. Der Github ist einfach mit Buildfehlern überfordert, da der Pfad zu den Montagewerkzeugen nach der Installation nicht in den PATH gelangt. Wir korrigieren auch dieses Missverständnis - wir korrigieren die Umgebungsvariable so, dass die Baugruppe, wenn auch nicht sehr reibungslos, zumindest fehlerfrei abläuft. Folgendes ist mir passiert (zur besseren Wahrnehmung in Zeilen unterteilt)
>echo %PATH%
C:\Python27\;
C:\Python27\Scripts;
C:\Windows\system32;
C:\Windows;
C:\Windows\System32\Wbem;
C:\Windows\System32\WindowsPowerShell\v1.0\;
C:\Program Files\nodejs\;
C:\Users\Den\AppData\Roaming\npm;
C:\Program Files\Microsoft Visual Studio\2017\Community\MSBuild\15.0\Bin;
C:\Program Files\MSBuild\Microsoft.Cpp\v4.0\v140;
Fett hervorgehoben ist das, was Sie manuell hinzufügen müssen. Stellen Sie natürlich sicher, dass diese Pfade vorhanden sind.
Obligatorisches Element -
Neustart .
Nun, jetzt die eigentliche Montage. Ich habe den FAR-Manager benutzt, aber niemand verbietet den Cmd der alten Schule
c:\
md app
cd \app
npm init
npm install sqlite3 --build-from-source --runtime=node-webkit --target_arch=ia32 --target=0.32.1 --msvs_version=2015
für x64 ändern wir --target_arch = x64.
Nun, das ist alles. Wenn alles richtig gemacht ist, wird die Assembly mit einer bestimmten Anzahl von Nachrichten wie übergeben
..\src\database.cc(672): warning C4996: 'Nan::MakeCallback': deprecate [C:\app\node_modules\sqlite3\build\node_sqlite3.vcxproj]
C:\app\node_modules\nan\nan.h(929): note: . "Nan::MakeCallback"
c:\app\node_modules\nan\nan_new.h(208): warning C4244: : "sqlite3_int64" "double", ( ..\src\database.cc) [C:\app\node_modules\sqlite3\build\node_sqlite3.vcxproj]
aber am Ende wird das Modul gehen
C:/app/node_modules/sqlite3/lib/binding/node-webkit-v0.32.1-win32-ia32\node_sqlite3.node
Baugruppennuance - Bei jeder Baugruppe wird der Ordner node_modules / sqlite3 / lib vom Kollektor gelöscht. Wenn daher zwei Module (für jede Architektur) zusammengestellt werden müssen, speichern Sie das Zwischenergebnis.
Vielen Dank für Ihre Aufmerksamkeit, endlich das Ergebnis des Experiments:
Zusammengestellte Module für NW.js 0.32.1 ia32 && x64 bei Google