Pull to refresh

Comments 17

И что к чему? Просто расписали мануал как это дело поднять. А кейсы с применением? А зачем вообще это надо — не описано от слова совсем. Статья ни о чем и думающий человек сделает то же самое без статьи тупо по докам
По докам не получается, вот ведь в чем засада. Прежде чем расписать этот мануал мне пришлось читать доки — раз, плясать на граблях отсутствия путей — два, гуглить похожие проблемы на гитхабе и вникать в суть граблей — три. И потом — не все универсалы-токаря высшего разряда — я, например, так и не осилил С++ и вообще всё это семейство, приходится сидеть с PHP, JS и 1С. Попробуйте собрать этот же модуль по docs.nwjs.io/en/latest/For%20Users/Advanced/Use%20Native%20Node%20Modules — последний зуб отдам, что ничего не выйдет.
Если по кейсам есть нужда — можно попробовать написать.
Кейсы sqlite — это любое десктопное приложение, что тут расписывать? ничего другого пока не придумали
nw.js поддерживает браузерный websql api (но без ограничений на размер базы).
Для многих задач его вполне хватает.
так то да, я в курсе про websql, однако мне нужен был именно sqlite. Ну и опыт тоже не помешал ))
Некоторое время назад были такие же проблемы, как у вас, но только с установкой пакетов для Electron'а. Необходимый мне NPM пакет я установил и заставил работать достаточно быстро, но так как я не до конца понимал процесс установки подобных пакетов, то решил потратить немного времени на изучение этого вопроса.

Большинство NPM пакетов, которые написаны на С/С++, поставляются с заранее скомпилированными *.node файлами под разные операционные системы и версии NodeJS. При установке пакетов под операционную систему и версию NodeJS, для которой нет заранее скомпилированных *.node файлов, происходит автоматическая компиляция NPM пакета из исходных файлов с использованием пакета node-gyp или node-pre-gyp. Эти два пакеты, можно так сказать, делают одно и то же — создают *.node файлы из исходников. Так как для Electron'а и NW.js никто, как правило, не компилирует *.node файлы предварительно, то это придеться делать самостоятельно, а если точнее, то компиляция всех необходимых файлов произойдет в автоматическом режиме во время установки пакета, но для ее успешного завершения необходимо выполнить рад условий.

И так, что же необходимо сделать для корректной установки любых NPM пакетов из исходников:

1. Установить все зависимости, которые нужны для работы NPM пакета node-gyp.
Подробное описание процесса установки всех зависимостей можно найти как на NPM странице пакета, так и на GitHub, но, как правило, на GitHub'е находится более актуальная информация, так как данные там обновляются в первую очередь.

Сам же пакет node-gyp глобально устанавливать не обязательно, потому как почти все пакеты, которые компилируются из исходников, имеют в списке своих зависимостей или пакет node-gyp, или node-pre-gyp.

Для OS Windows, в большинстве случаев, достаточно ввести следующую команду в консоли с правами администратора:

npm install --global --production windows-build-tools

После ввода этой команды произойдет автоматическая установка и настройка всех зависимостей NPM пакета node-gyp.

Первый этап выполнен. Ничего больше, кроме ввода этой единственной команды, делать не надо.

После завершения этого этапа вы сможете устанавливать любые NPM пакеты из исходников, но только для текущей используемой версии NodeJS и операционной системы, то есть ни для Electron'a, ни для NW.js вы пока еще не сможете устанавливать пакеты, а если точнее, то установить пакеты вы сможете, но работать они не будут.

2. Указать переменные окружения NPM, которые использует пакет node-gyp/node-pre-gyp в процессе своей работы.
Именно значения переменных окружения NPM определяют для какой версии операционной системы и NodeJS необходимо компилировать устанавливаемые пакеты.

Вариантов установки переменных окружения есть несколько, но здесь я расскажу только об одном варианте, который, как я считаю, лучше всего подходит при установке пакетов и дальнейшего их использования в NW.js и Electron'е.

Что необходимо сделать:

1. Создать в директории текущего проекта, где находится файл package.json, файл .npmrc (с точкой в начале).

2. Добавить в этот файл все необходимые переменные окружения NPM. Пример файла для NW.js v0.32.3 64-bit:

# комментарии в файле стирать не обязательно

runtime=node-webkit # node, electron, node-webkit
target=0.32.3 # используемая версия NW.js
arch=x64 # архитектура NW.js: ia32, x64


3. Установить все необходимые пакеты используя команду:

npm install <package-name>

Вот и все. Теперь вы можете устанавливать любые пакеты из исходников, которые после установки будут корректно работать в NW.js, а не только NPM пакет sqlite3.

Несмотря на всю простоту установки новых пакетов из исходников под NW.js с использованием этого метода, хочу заметить, что данный метод имеет один и очень существенный минус — переменные окружения NPM распространяются на все устанавливаемые вами локальные пакеты. Другими словами, если кроме NW.js вы используете еще что-то, скажем Webpack, для которого необходимо установить какой-то пакет из исходников, то этот пакет, который планируется использовать внутри Webpack'а, будет скомпилирован для использования в NW.js, а не для NodeJS. В следствии чего, устанавливаемый из исходников пакет для Webpack'а, в большинстве случаев, будет работать некорректно. На самом же деле, не стоит слишком расстраиваться, если этот метод, как может показаться изначально, вам из-за этого недостатка не походит. На практике, все пакеты для Webpack'а, которые я устанавливал, у меня прекрасно работали, но правда только потому, что ни один из них не устанавливался из исходников.

Надеюсь, что эта информация поможет вам лучше разобраться с тем, как происходит установка пакетов из исходников.
Согласен. Но до электрона я еще не добрался, хотя почитал доку и меня напрягло разделение на два процесса.
По поводу установки — простейший путь — установить ноду и поставить нужный пакет — проходит без проблем и без каких-либо подготовок, даже без windows-build-tools. Однако сборка под node-webkit у меня не получалась довольно долго (занимался этим вяло и в промежутках), посему и был пройден описанный мной путь.
Но за подсказки спасибо — возможно, это будет более простой способ на будущее.
Топикстартеру. Крайне рекомендую создать свой «пускач», где выставляются все ваши переменные. MS не зря в каждый свой продукт вставляет msvcvar.cmd
Видимые плюсы этого подхода, очистка системных путей и поиск по явно заданному пути.
В этом отношении можно кинуть булыжник в сторону Android and Java, файлики adb.exe и java.exe на любой машине можно найти в 10 -20 экземплярах.

Я с NW.js использовал IndexDB. Хорошая NoSQL БД.

Я пока решил протестировать sqlite, предполагаются достаточно большие объемы с несложными запросами. Когда проект будет в той стадии готовности, на которой можно будет анализировать производительность, начну испытывать другие БД.

Захотелось изваять нечто на HTML и JS, чтобы было десктопное и удобное
Чем всё закончилось? Получилось что-нибудь изваять? Или только выкачали с Сети несколько гигабайт дерьма, загадили реестр и память, и всё?

Пока в процессе, делается между основной работой, а все эти гигабайты дерьма болтаются на отдельной машине, специально для этого и собранной.

Думаете, кому-то будет интересен очередной sql-explorer, написанный на js с применением vue.js для фронта, express для бэка и все это в одном флаконе под nw.js? Если да, то буду готовить и для публикации тоже))

Конкретный результат (в частности, очередной sql-explorer) не очень интересен, но интересен опыт решения задачи. Для понимания, во что в итоге выливается применение технологии. Пока что с учётом установки гигабайтов (и особенно устаревшей версии Питона) и танцев с бубном смотрится не очень, но нужно, конечно, смотреть на результат.
Чем дальше в лес — тем толще партизаны. Вот и все применение технологии. Все не так страшно, если результат удовлетворит. А так — можно ведь и не использовать sqlite в частности, есть альтернативы, не требующие таких жертв. Была у меня возможность — я это испробовал. Дальше буду смотреть — был ли смысл.

Щас бы в 2018 смеяться над десктопными приложениями на js. Atom, VS Code…

Only those users with full accounts are able to leave comments. Log in, please.