Electron应用打包Sqlite3报错的解决方案
You are watching the Chinese version of this passage, to English version, please check A way to solve error in packing electron app with sqlite3
最近拿Electron写了一个GUI,然后用到了数据库
数据库模块搜寻一番后用了Sqlite3这个模块,于是开始了长达四个小时的网络搜寻(
在dev下程序可以正常运行,但是一到打包的时候就开始报错
错误内容如下:(找的别的但是是这些个)
ERROR in ./node_modules/@mapbox/node-pre-gyp/lib/util/nw-pre-gyp/index.html 1:0
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>
after installing pnpm i npm bluebird mock-aws-s3 aws-sdk nock --save-optional
以及aws-sdk
,mock-aws-s3
,nock
这三个库缺失
以及一个脚本无法运行的问题,是.cs的脚本(一开始还以为是C#的代码)
问题解决方案
对于第一个问题,是webpack在打包过程中缺失了对HTML的loader,因此在webpack的config里的module->rules加入以下规则:
{
test: /\.html$/,
use: {
loader: 'html-loader',
},
}
即可消除这条错误
对于后面四个,其实也是对sqlite3缺乏一个loader来进行打包,在网上找了巨久(
终于在Github的一个issue里找到了解决方案 #1700 :
安装 sqlite3-loader
和node-loader
npm install sqlite3-loader node-loader
同样更新webpack配置文件,在刚刚的rules里加上:
{
test: /sqlite3-binding\.js$/,
use: [ 'sqlite3-loader' ],
},
{
test: /\.node$/,
use: 'node-loader',
},
重新打包即可解决问题
提示
之前有看到说在config里加上
externals: {
sqlite3: 'sqlite3'
}
的,我试过了,能打包,就是运行之后会报错找不到模块sqlite3而已(