Хабрахабр

SQLite и NW.js — пошаговая инструкция для создания крепкой дружбы

Привет, Хабр и его обитатели! Захотелось изваять нечто на HTML и JS, чтобы было десктопное и удобное. Что для этого нужно? Правильно. Node.js и NW.js или Electron. Поглядев на слабые попытки холивара NW vs Electron и почитав документацию и того и другого было принято решение для начала пощупать NW.js.

Выполнение npm i sqlite3 устанавливает только те библиотеки, которые могут исполняться при непосредственном запуске через node. Но вот ведь засада. Гугл сотоварищи выдает только один рецепт включения sqlite в проект на nw.js, да и тот приходится вытаскивать из кэша. А если попытаться подключить скрипт в html и запустить этот html в NW.js, то ничего у нас не выйдет. Посему было потрачено пару дней на изучение проблематики и поиск рабочего решения. Да и устарел он уже. Для начала была собрана машина «из того что было» и установлена Windows 7 x32 с пакетом . Прошу под кат.
Итак. 7. NET 4. Почему 32 бита? 1 (потребуется для Visual C++). Хотя, как оказалось, создание модуля под x64 не требует исполнения на x64 системе. Решил начать с малого.

8. Затем был поставлен Node.js версии 10. 9. 0 Хотя на момент окончания экспериментов уже появилась 10. Но тут я решил послушать знающих людей: 0.

Предположил, что non-LTS — это беты, альфы и ночные сборки. Поразмышляв, решил, что делаю все-таки для LTS, хотя не совсем понятно, где у них у всех LTS, а где нет.

Хотя, как любой недоучка сделал все наполовину и следующую рекомендацию на выполнил:

Рекомендация из документации для LTS-releases

On Windows, you need to replace the file
\node_modules\node-gyp\src\win_delay_load_hook.cc with the one at github.com/nwjs/nw.js/blob/nw18/tools/win_delay_load_hook.cc before installing modules with node-gyp or npm.

Наверное, потому что не ставил node-gyp.
Ну не нашел я этот файл у себя на компе.

Для ноды ставим (крайне необходимо делать из командной строки с правами администратора)

npm i -g nw-gyp

Собственно говоря, замена node-gyp

nw-gyp is a hack on node-gyp to support NW.js specific headers and libraries.

Далее — качаем Visual Studio Community Edition (текущая ссылка легко находится в любимом поисковике) — на момент написания статьи текущая версия 2017. Что для нас немаловажно — она содержит в себе Build Tools 2015 — пока нативные модули в ноде собираются только с этой версией и более свежих не поддерживают. Скачиваем инсталлятор, запускаем и ставим одну галочку в закладке «Отдельные компоненты» — Набор инструментов VC++ 2015.3 v14.00 (v140) для ПК

1 SDK также необходим, поэтому устанавливаем все три пункта. Добавившийся Windows 8. Установка в данном виде приводит к скачке 2,89 гигабайт всякого нужного.

Причем версии 2. Едем дальше — качаем змейку. Устанавливаем, по умолчанию в C:\Python27.
А теперь — внимание! 7. Засада.

Инсталлятор по умолчанию считает, что необязательно добавлять в PATH расположение питончика, поэтому устраняем это недоразумение на этапе установки

А все потому, что мелкомягкая корпорация также не считает нужным прописывать пути к своим творениям. Похожая засада преследует многих разработчиков при сборке самых разных модулей для ноды. Исправляем и это недоразумение — правим переменную среды, чтобы она позволяла сборке пройти если и не очень гладко, то хотя бы без ошибок. Гитхаб просто завален ошибками сборки из-за того, что после установки в PATH не попадают пути к сборочным инструментам. Вот что получилось у меня (разбил на строки для лучшего восприятия)

0\;
C:\Program Files\nodejs\;
C:\Users\Den\AppData\Roaming\npm;
C:\Program Files\Microsoft Visual Studio\2017\Community\MSBuild\15. >echo %PATH%
C:\Python27\;
C:\Python27\Scripts;
C:\Windows\system32;
C:\Windows;
C:\Windows\System32\Wbem;
C:\Windows\System32\WindowsPowerShell\v1. Cpp\v4. 0\Bin;
C:\Program Files\MSBuild\Microsoft. Естественно, убедившись, что эти пути существуют. 0\v140;


Выделенное жирным шрифтом — то, что необходимо добавить вручную.

Обязательный пункт — перезагрузка.

Я пользовался менеджером FAR, но никто не запрещает и олдскульный cmd Ну и теперь собственно сборка.

32. c:\
md app
cd \app
npm init
npm install sqlite3 --build-from-source --runtime=node-webkit --target_arch=ia32 --target=0. 1 --msvs_version=2015

для x64 меняем --target_arch=x64.

Если все сделано правильно, то сборка проходит с некоторым количеством сообщений типа Ну собственно и всё.

объявление "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]

но в итоге модуль собирается и располагается в
C:/app/node_modules/sqlite3/lib/binding/node-webkit-v0. ..\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: см. 1-win32-ia32\node_sqlite3.node
32.

Поэтому, если есть необходимость собрать два модуля (для каждой архитектуры) — сохраняйте промежуточный результат. Нюанс сборки — при каждой сборке папка node_modules/sqlite3/lib удаляется сборщиком.

Спасибо за внимание, напоследок результат эксперимента:

32. Собранные модули для NW.js 0. 1 ia32 && x64 на гуглоДиске

Показать больше

Похожие публикации

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Кнопка «Наверх»