SQLite et NW.js - instructions pas à pas pour créer des amitiés solides

Bonjour, Habr et ses habitants! Je voulais sculpter quelque chose en HTML et JS pour que ce soit desktop et pratique. Que faut-il pour cela? Oui. Node.js et NW.js ou Electron. En regardant les faibles tentatives de l'holivar NW vs Electron et en lisant la documentation des deux, la décision a été prise de commencer à ressentir NW.js.

Mais voici une embuscade. L'exécution de npm i sqlite3 installe uniquement les bibliothèques qui peuvent être exécutées lorsqu'elles sont lancées directement via le nœud. Et si vous essayez de connecter le script en html et d'exécuter ce html en NW.js, rien n'en sortira. Google Associates ne donne qu'une seule recette pour inclure sqlite dans un projet sur nw.js, et même celle-ci doit être retirée du cache. Oui, et il est déjà dépassé. Par conséquent, quelques jours ont été consacrés à l'étude des problèmes et à la recherche d'une solution de travail. Je demande un chat.

Alors. Pour commencer, la machine a été construite "à partir de ce qu'elle était" et a installé Windows 7 x32 avec le package .NET 4.7.1 (requis pour Visual C ++). Pourquoi 32 bits? J'ai décidé de commencer petit. Bien que, comme il s'est avéré, la création d'un module pour x64 ne nécessite pas d'exécution sur un système x64.

Ensuite, la version 10.8.0 de Node.js a été installée, bien que 10.9.0 soit déjà apparue à la fin des expériences. Mais j'ai décidé d'écouter des gens bien informés:



Après y avoir réfléchi, j'ai décidé que je faisais tout de même pour LTS, bien qu'il ne soit pas entièrement clair où tous ont LTS et où non. Il a suggéré que les non-LTS sont des versions bêta, alpha et nocturnes.

Bien que, comme tout abandon, tout ait été fait en deux et que la recommandation suivante ait été respectée:

Recommandation de documentation pour les versions LTS
Sous Windows, vous devez remplacer le fichier
<npm-path> \ node_modules \ node-gyp \ src \ win_delay_load_hook.cc avec celui de github.com/nwjs/nw.js/blob/nw18/tools/win_delay_load_hook.cc avant d'installer des modules avec node-gyp ou npm.

Eh bien, je n'ai pas trouvé ce fichier sur mon ordinateur. Probablement parce que je n'ai pas installé node-gyp.

Nous le définissons pour le nœud (il est absolument nécessaire de le faire à partir de la ligne de commande avec des droits d'administrateur)

npm i -g nw-gyp

En fait, le nœud-gyp de remplacement
nw-gyp est un hack sur node-gyp pour prendre en charge les en-têtes et bibliothèques spécifiques de NW.js.

Suivant - téléchargez Visual Studio Community Edition (le lien actuel se trouve facilement dans votre moteur de recherche préféré) - au moment d'écrire cet article, c'est la version actuelle de 2017. Ce qui est important pour nous - il contient Build Tools 2015 - tandis que les modules natifs du nœud ne sont assemblés qu'avec cette version et plus encore frais ne supporte pas. Téléchargez le programme d'installation, lancez et cochez une case dans l'onglet "Composants individuels" - Toolbox VC ++ 2015.3 v14.00 (v140) pour PC



Le SDK Windows 8.1 ajouté est également nécessaire, nous installons donc les trois points. L'installation sous cette forme conduit à un saut de 2,89 gigaoctets de tout ce dont vous avez besoin.

Nous allons plus loin - nous balançons un serpent. Et la version 2.7. Installez par défaut dans C: \ Python27.
Et maintenant - attention! Embuscade.

Par défaut, le programme d'installation estime qu'il n'est pas nécessaire d'ajouter un emplacement python au PATH, par conséquent, nous éliminons ce malentendu au stade de l'installation



Une embuscade similaire hante de nombreux développeurs lors de la création d'une grande variété de modules pour un nœud. Et tout cela parce que la petite entreprise ne juge pas non plus nécessaire de prescrire les chemins de ses créations. Le github est simplement submergé d'erreurs de construction, car après l'installation, le chemin vers les outils d'assemblage n'entre pas dans le CHEMIN. Nous corrigeons également ce malentendu - nous corrigeons la variable d'environnement afin qu'elle permette au montage de se dérouler sinon très bien, du moins sans erreur. Voici ce qui m'est arrivé (divisé en lignes pour une meilleure perception)

>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;


Surligné en gras est ce que vous devez ajouter manuellement. Naturellement, s'assurer que ces chemins existent.

Élément obligatoire - redémarrage .

Eh bien, maintenant l'assemblage proprement dit. J'ai utilisé le gestionnaire FAR, mais personne n'interdit le cmd old-school

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

pour x64, nous changeons --target_arch = x64.

Eh bien, c'est tout. Si tout est fait correctement, l'assemblage passe avec un certain nombre de messages comme

..\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]

mais à la fin, le module est assemblé et situé dans
C:/app/node_modules/sqlite3/lib/binding/node-webkit-v0.32.1-win32-ia32\node_sqlite3.node

Nuance de l'assembly - avec chaque assembly, le dossier node_modules / sqlite3 / lib est supprimé par le collecteur. Par conséquent, s'il est nécessaire d'assembler deux modules (pour chaque architecture), enregistrez le résultat intermédiaire.

Merci pour votre attention, enfin, le résultat de l'expérience:

Modules assemblés pour NW.js 0.32.1 ia32 && x64 sur Google

Source: https://habr.com/ru/post/fr420413/


All Articles