在 Angular + Electron 应用程序中使用 sqlite3:关键依赖项:依赖项的请求是一个表达式

Posted

技术标签:

【中文标题】在 Angular + Electron 应用程序中使用 sqlite3:关键依赖项:依赖项的请求是一个表达式【英文标题】:Using sqlite3 in an Angular + Electron app: Critical dependency: the request of a dependency is an expression 【发布时间】:2020-06-07 08:10:37 【问题描述】:

在我的Angular + Electron app 中,我正在尝试安装一些 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 严重 依赖:依赖的请求是一个表达式

../node_modules/npm/lib/npm.js 中的警告 235:10-25 严重 依赖:依赖的请求是一个表达式

警告 ../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” '/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 节点 | ;(function () // 包装器,以防我们处于 module_context 模式 | // windows:在此文件夹中运行“npm blah”

将调用 WSH,而不是节点。

在this thread 中发布了此问题的解决方案,它是关于将以下内容添加到 webpack 配置文件中:

externals:  'sqlite3':'commonjs sqlite3', 

但是我不清楚在我的 Angular 应用中添加此类配置的位置。

【问题讨论】:

【参考方案1】:

我使用Custom webpack builders (angular-builders) 解决了我的问题。

允许自定义构建配置而不弹出 webpack 配置(ng 弹出)

安装后,我现在可以在我添加的位置指定自定义 webpack 配置:

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

我还必须运行 node postinstall && electron-builder install-app-dep 才能使其正常工作。

【讨论】:

以上是关于在 Angular + Electron 应用程序中使用 sqlite3:关键依赖项:依赖项的请求是一个表达式的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Angular Electron 中加载模块?

使用Angular与TypeScript构建Electron应用

Angular 2 + Electron 开发web和桌面应用

使用 Electron 和 Angular 进行热重载

如何使用 Visual Studio Code 中的 Electron 和 Angular 调试应用程序?

在Electron中打包的Angular app中运行shell脚本