文章目录
- 一、安装 electron-rebuild 和 better-sqlite3
- 二、使用 electron-rebuild 重建 Node.js 模块
- 三、better-sqlite3 的基本使用
- 四、打包
- 五、参考资料
一、安装 electron-rebuild 和 better-sqlite3
yarn add -D electron-rebuild
yarn add better-sqlite3
Electron 内置的 Node.js 版本和编译到 better-sqlite3 的 Node.js 版本不同将可能导致安装失败,所以此处需要安装
electron-rebuild
重建 Node.js 模块。(注意安装顺序,否则可能出现安装失败的问题)
二、使用 electron-rebuild 重建 Node.js 模块
如果安装完 better-sqlite3
不重建直接运行,则可能出现以下报错:
Error: The module 'xxx'
was compiled against a different Node.js version using
NODE_MODULE_VERSION xxx. This version of Node.js requires
NODE_MODULE_VERSION xxx. Please try re-compiling or re-installing
the module (for instance, using `npm rebuild` or `npm install`).
修改 package.json
文件中的 scripts
内容:
"scripts": {
"dev": "vite",
...
"rebuild": "electron-rebuild -f -w better-sqlite3"
},
执行命令:yarn run rebuild
重建 Node.js 版本。
三、better-sqlite3 的基本使用
新建 db/DBManager.ts
文件:
const sqliteDB = require('better-sqlite3');
const path = require('path');
const dbPath =
process.env.NODE_ENV === "development" ?
"./wallpapers.db" : path.join(process.resourcesPath, "./wallpapers.db")
// 打开数据库,如果不存在则创建,cacheSize 缓存数据最大值
const db = new sqliteDB(dbPath,{ cacheSize: 15 });
db.pragma('journal_mode = WAL');
exports.db = db;
新建 db/ImageManager.ts
文件:
const dbmgr = require("./DBManager.ts");
const db = dbmgr.db;
// 读取信息
const readAllImgs = () => {
try {
const result = db.prepare("SELECT * FROM imgs", { cached: true }).all();
return result;
} catch (error) {
console.error(error);
throw error;
}
};
// 批量插入数据 (values 是一个对象)
const insertWallhaven = (keys, values) => {
try {
// 使用命名参数 例: $id、$url ... ; 数据 values => [{id: xx, url: xx},{}]
// 由于插入的数据 id 可能重复,所以此处使用 OR IGNORE
const insertQuery = db.prepare(
`INSERT OR IGNORE INTO wallhaven (${keys.join(",")}) VALUES (${keys.map((item) => "$" + item).join(",")})`
);
const insertMany = db.transaction((values) => {
for (const val of values) {
insertQuery.run(val)
}
});
insertMany(values);
} catch (error) {
console.error(error);
throw error;
}
};
module.exports = {
readWallhaven,
insertWallhaven,
};
四、打包
修改 electron-builder.json5
文件,添加打包配置:
"directories": {
...
},
// 添加数据库文件
"extraResources": [
"./wallpapers.db"
],
将数据库文件放在根目录下:
说明: 后续在使用过程中发现,每次安装新的第三方库时都需要重新执行 yarn run rebuild
命令重建 Node.js 模块,否则可能出现报错。
五、参考资料
-
https://dev.to/arindam1997007/a-step-by-step-guide-to-integrating-better-sqlite3-with-electron-js-app-using-create-react-app-3k16
-
https://www.camelgeek.net/117.html
-
https://github.com/WiseLibs/better-sqlite3
-
https://www.electronjs.org/zh/docs/latest/tutorial/using-native-node-modules