在 electron+vite+vue3+express 项目中使用better-sqlite3

avatar
作者
筋斗云
阅读量:2

文章目录

一、安装 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 模块,否则可能出现报错。

五、参考资料

广告一刻

为您即时展示最新活动产品广告消息,让您随时掌握产品活动新动态!