electron 错误-../node_modules/@mapbox/node-pre-gyp/lib/util/nw-pre-gyp/index.html在nextron应用程序中安装sqlite3后

n3schb8v  于 2023-10-14  发布在  Electron
关注(0)|答案(1)|浏览(341)
../node_modules/@mapbox/node-pre-gyp/lib/util/nw-pre-gyp/index.html
Module parse failed: Unexpected token (1:0)
You may need an appropriate loader to handle this file type, currently no loaders are configured to process this file. See https://webpack.js.org/concepts#loaders
> <!doctype html>
| <html>
| <head>

在我用nextron应用程序安装sqlite3后出现此错误
在此之后,我开始得到以下错误

ModuleParseError: Module parse failed: Unexpected token (9:6)
You may need an appropriate loader to handle this file type, currently no loaders are configured to process this file. See https://webpack.js.org/concepts#loaders
| // This script needs to be compatible with PowerShell v2 to run on Windows 2008R2 and Windows 7.
| 
> using System;
| using System.Text;
| using System.Runtime.InteropServices;

之后,开始得到这个错误导入错误

Error: /home/Ankit/Projects/test/node_modules/electron/dist/resources/electron.asar/package.jsondoes not exist

> 1 | const sqlite3 = require("sqlite3").verbose()
                     ^

不知道怎么遇到这种情况,有什么帮助就更好了,提前谢谢你了。
第一个错误得到解决,如果我添加以下代码到我的next.js.js文件

config.module.rules.push({ test: /.html$/, use: "html-loader", });

我通过将以下代码添加到next.config.js文件中解决了第二个错误

config.module.rules.push({
    test: /\.cs$/,
    use: "raw-loader",
});

也使用电子构建器

还使用了替代better-sqlite3,但在初始化时出现错误undefined indexOf
我使用的是:node v16.20.0 sqlite3 v5.1.6@mapbox/node-pre-gyp v1.0.10

alen0pnh

alen0pnh1#

您正在尝试加载依赖于@mapbox/node-pre-gyp的二进制Node.js插件-node-sqlite3。取决于你在做什么,这可能是不可能的。
首先,这些模块在浏览器中不起作用。在Electron的情况下,它们将仅在Node.js进程中工作。
然而,在您的特定情况下,您也有webpack-可能是next.js的一部分。webpack试图将node_modules打包成一个包,并阻塞了查找和加载共享库的代码。
您必须手动告诉webpack将共享库(通常是以.node结尾的文件)视为external,并将require()保留在代码中。查看node-sqlite3index.js。您可能需要编辑它,以便.node文件的路径是固定的,而不是自动检测-此webpack无法处理。
然后,如果您的代码在Node.js环境中执行,它将能够加载库。如果在UI呈现过程中加载它,它将失败。
我只是用next.js做了一些非常类似的事情:
next.config.js

export default {
  webpack: (config) => {
    config.externals.push('everything-json');
    return config;
  }
};

(我使用自己的二进制模块,也使用@mapbox/node-pre-gyp,称为everything-json

相关问题