Электрон, TypeScript, SQLite: package.json не найден - PullRequest
0 голосов
/ 26 мая 2018

У меня проблемы с использованием пакета npm sqlite3 с электроном.Я компилирую свое электронное приложение из файлов Typescript в Javascript, связываю их с browserify, а затем запускаю основной пакет для запуска основного процесса.

Но когда я пытаюсь использовать sqlite3, у меня возникают проблемы.Я попытался использовать электронное восстановление как отдельный шаг перед компиляцией машинописи.Я попытался установить sqlite3 с флагом --build-from-source.Но всякий раз, когда я пытаюсь запустить свой основной пакет, я получаю ошибку «package.json not there», которая, похоже, исходит из кода pre-gyp для узла в моем основном комплекте, который происходит из модуля sqlite3.

У кого-нибудь есть идеи относительно того, что я делаю неправильно?Я не понимаю, почему код строится сам с помощью pre-gyp, когда я уже перестроил его с помощью восстановления электронов.У меня есть package.json в корневом каталоге проекта, но основной пакет находится в (root) / build / js-bundles, а код ищет package.json в (root) /build.

Я знаю, что мое описание не совсем ясно, поэтому, если что-то не очевидно, я сделаю все возможное, чтобы уточнить.(Программа отлично работает, когда я удаляю зависимость от sqlite3).

1 Ответ

0 голосов
/ 26 мая 2018

Хорошо, проблема в том, что я использовал browserify для связывания зависимости sqlite3.Исключив sqlite3 с флагом --exclude, проблема исчезла.

Кажется, проблема в том, что сборка sqlite3 генерирует файл sqlite3.js, единственная цель которого - найти (и загрузить?) Встроенный node-sqlite3.nodeбинарный - но только во время выполнения.Когда sqlite3 упакован и пакет запущен, он попытается найти двоичный файл, но не может, потому что мой пакет не находится в каталоге node_modules/sqlite, он находится в моем каталоге сборки.Исключив sqlite3 из комплектации browserify, во время выполнения import * as sql from "sqlite3" найдет node_modules/sqlite3/sqlite3.js, найдет двоичный файл и затем загрузит его в программу.

Урок, как представляется, пока браузер знаеткак связать стандартные модули NodeJs, такие как fs и path, связывание пользовательских модулей собственного узла из npm не работает.Программа должна найти его во время выполнения.

Я ничего не знаю о внутренней работе NodeJ и о том, как программа знает, как искать sqlite3 в build/../node_modules/sqlite3 (я не знал, что этомог бы), поэтому я был бы рад, если бы кто-нибудь более знающий мог предоставить подробности.

Кроме того, даже после исключения sqlite3 у меня все еще были проблемы, потому что я не построил sqlite3 против моей версии электрона.Ресурсы для этого можно найти в электронное восстановление в общем случае или в случае sqlite3 в mapbox / node-sqlite3 в Установка раздел.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...