Использование sqlite3 в приложении Angular + Electron: Критическая зависимость: запрос зависимости является выражением - PullRequest
1 голос
/ 23 февраля 2020

В моем приложении Angular + Electron Я пытаюсь установить библиотеку sqlite для чтения содержимого из файла базы данных sqlite.

Я установил sqlite3 используя:

npm install sqlite3
npm install --save-dev @types/sqlite3

И я попытался использовать его, выполнив:

import * as sqlite from 'sqlite3';

// ...

const myDb = new sqlite.Database('/path/to/file.sqlite');

Однако при сборке приложения происходит сбой:

ПРЕДУПРЕЖДЕНИЕ в ./node_modules/sqlite3/lib/sqlite3.js 4: 14-35 Критическая зависимость: запрос зависимости является выражением

ПРЕДУПРЕЖДЕНИЕ в ./node_modules/node-pre-gyp /lib/pre-binding.js 20: 22-48 Критическая зависимость: запрос зависимости является выражением

ПРЕДУПРЕЖДЕНИЕ в ./node_modules/node-pre-gyp/lib/util/versioning. js 17: 20-67 Критическая зависимость: запрос зависимости является выражением

ПРЕДУПРЕЖДЕНИЕ в ../node_modules/npm/lib/npm.js 124: 16-56 Критическая зависимость : запрос зависимости - это выражение

WARNING в ../node_modules/npm/lib/npm.js 235: 10-25 Критическая зависимость: запрос зависимости является выражением

WARNING в ../node_modules/npm/node_modules/encoding/lib/iconv-loader.js 9: 12-34 Критическая зависимость: запрос зависимости является выражение

ПРЕДУПРЕЖДЕНИЕ в ./node_modules/node-pre-gyp/lib/util/compile.js Модуль не найден: Ошибка: не удается разрешить 'node-gyp' в '/ home / shin / sources / Keira3 / node_modules / node-pre-gyp / lib / util '

ПРЕДУПРЕЖДЕНИЕ в ./node_modules/node-pre-gyp/lib/util/nw-pre-gyp/index.html 1 : 0 Ошибка синтаксического анализа модуля: неожиданный токен (1: 0) Вам может потребоваться соответствующий загрузчик для обработки этого типа файлов, в настоящее время загрузчики не настроены для обработки этого файла. См. https://webpack.js.org/concepts#loaders

| |

ОШИБКА в ./node_modules/node-pre-gyp/lib/info.js Модуль не найден: Ошибка: не удается разрешить 'aws -sdk' в '/ home / shin / sources / Keira3 / node_modules / node-pre-gyp / lib 'ОШИБКА в ./node_modules/node-pre-gyp/lib/publish.js Модуль не найден: Ошибка: не удается разрешить' aws -sdk 'in' / home / shin / sources / Keira3 / node_modules / node-pre-gyp / lib 'ОШИБКА в ./node_modules/node-pre-gyp/lib/unpublish.js Модуль не Обнаружено: Ошибка: невозможно разрешить 'aws -sdk' в '/ home / shin / sources / Keira3 / node_modules / node-pre-gyp / lib' ОШИБКА в ../node_modules/npm/bin/npm -cli. js 1: 0 Ошибка синтаксического анализа модуля: неожиданный символ '#' (1: 0) Вам может потребоваться соответствующий загрузчик для обработки этого типа файла, в настоящее время загрузчики не настроены для обработки этого файла. См. https://webpack.js.org/concepts#loaders

! / Usr / bin / env node | ; (function () {// обертка на случай, если мы находимся в режиме module_context | // windows: запуск "npm blah" в этой папке

вызовет W SH, а не узел.

В этой ветке опубликовано решение этой проблемы, и речь идет о добавлении следующего в файл конфигурации webpack:

externals: { 'sqlite3':'commonjs sqlite3', }

однако мне не ясно, где добавить такой конфиг в моем приложении Angular.

1 Ответ

1 голос
/ 25 февраля 2020

Я решил свою проблему, используя Пользовательские компоновщики веб-пакетов (angular -builders) .

Разрешить настройку конфигурации сборки без удаления конфигурации веб-пакета (ng eject)

После его установки я теперь могу указать пользовательский конфиг веб-пакета, в который я добавил:

module.exports = {
    externals: {
        'sqlite3':'commonjs sqlite3'
    }
};

Мне также пришлось запустить node postinstall && electron-builder install-app-dep, чтобы он заработал.

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