Как упаковать sqlite3 в исполняемые пакеты node.js?

Я хочу использовать простую базу данных в скомпилированном приложении node.js. Возможно ли это без установки базы данных отдельно? то есть я хочу, чтобы база данных была включена в файл .exe, чтобы я мог просто скопировать и выполнить этот файл.

Я использую pkg для создания файлов .exe, и он работает хорошо, но когда я использую sqlite3 модуль npm ошибки .exe, когда я пытаюсь выполнить со следующим предупреждением:

pkg/prelude/bootstrap.js:1155
      throw error;
      ^

Error: Cannot find module 'C:\snapshot\sqlite\node_modules\sqlite3\lib\binding\node-v51-win32-x64\node_sqlite3.node'
1) If you want to compile the package/file into executable, please pay attention to compilation warnings and specify a literal in 'require' call. 2) If you don't want to compile the package/file into executable and want to 'require' it from filesystem (likely plugin), specify an absolute path in 'require' call using process.cwd() or process.execPath.
    at Function.Module._resolveFilename (module.js:470:15)
    at Function.Module._resolveFilename (pkg/prelude/bootstrap.js:1252:46)
    at Function.Module._load (module.js:418:25)
    at Module.require (module.js:498:17)
    at Module.require (pkg/prelude/bootstrap.js:1136:31)
    at require (internal/module.js:20:19)
    at Object.<anonymous> (C:\snapshot\sqlite\node_modules\sqlite3\lib\sqlite3.js:4:15)
    at Module._compile (pkg/prelude/bootstrap.js:1226:22)
    at Object.Module._extensions..js (module.js:580:10)
    at Module.load (module.js:488:32)

Что похоже на ошибку sqlite3, исправленную здесь: https://github.com/zeit/pkg/issues/183 (поскольку ошибка была исправлена, я предполагаю, что это проблема пользователя)

Глядя на сообщение об ошибке, похоже, что файл ...../bide_sqlit3.node не может быть найден. И глядя на node_modules/ в моей среде разработки (где работает модуль), я не могу найти этот файл. Поэтому я предполагаю, что файл НЕ включается в исполняемый файл и что мне нужно сделать что-то, что:

  1. Заставляет pkg включать файл в двоичный файл
  2. Изменяет путь к файлу на путь к файлу в двоичном файле

Как мне это сделать с zeit/pkg? или, если это более правильно: как заставить npm устанавливать двоичные файлы в node_modules, а затем ссылаться на эти двоичные файлы?


person Zach Smith    schedule 28.09.2017    source источник
comment
ты решил эту проблему?   -  person lukassz    schedule 04.02.2021
comment
Я не помню... Извините   -  person Zach Smith    schedule 04.02.2021


Ответы (1)


Вы должны поместить созданный node-sqlite3.node в тот же каталог, что и двоичный файл, который вы создали с помощью pkg (как указано в эта проблема). Этот файл можно найти в вашем node_modules/sqlite3/lib/binding/node-vxx-xxxxx-xxx/node_sqlite3.node.

Вам также необходимо убедиться, что вы создаете свой проект с помощью pkg с той же версией узла, что и sqlite3.

person Martin Klomp    schedule 24.10.2017
comment
Это не работает, см. этот вопрос stackoverflow.com/questions/47789200/ - person simon-p-r; 13.12.2017
comment
@simon-p-r: мой ответ также отражает руководство pkg (github.com/zeit/pkg#native -addons), поэтому проблема может заключаться в ошибке в pkg. - person Martin Klomp; 15.12.2017
comment
@simon-p-r Вопрос, который вы связали, был удален. Можете ли вы уточнить, почему именно это не работает? - person Ivan Rubinson; 26.08.2019