gpt4 book ai didi

sqlite - Electron-packager:打包后无法定位本地db文件

转载 作者:行者123 更新时间:2023-12-03 17:02:10 26 4
gpt4 key购买 nike

背景:
在我的应用程序中,我有一个本地数据库文件,名为 example.dbmain.js 读取.我的项目结构和部分main.js程序如下所示。

项目文件夹架构

enter image description here

main.js

const {
app,
BrowserWindow,
dialog,
Menu
} = require('electron')

const fs = require('fs')
const path = require('path')

const sqlite3 = require('sqlite3').verbose()

// load dataBase
let dbFile = 'app/db/example.db'
const db = new sqlite3.Database(dbFile)

Package.json
{
"name": "Example",
"version": "1.0.0",
"description": "",
"main": "./app/main.js",
"scripts": {
"postinstall": "install-app-deps",
"start": "electron ."
},
"keywords": [],
"author": "",
"license": "ISC",
"devDependencies": {
"electron-builder": "^15.5.1",
"electron-prebuilt": "^1.4",
"electron-rebuild": "^1.5.7",
"electron-packager": "^8.1.0"
},
"dependencies": {
"jquery": "^3.1.1",
"sqlite3": "^3.1.8"
}
}

问题:

我可以通过运行 npm start 成功加载数据库文件,但是,在我通过在 Example 下运行以下命令行成功地将我的程序打包到 Windows 平台之后文件夹:
node_modules/.bin/electron-packager --platform=win32 --arch=x64 .
我跑了 .exe文件,但系统显示找不到我的数据库文件。

enter image description here

尝试过的方法:

我试图修改 main.js 中的 db 文件路径通过使用 process.resourscesPath如下:
// load dataBase
let dbFile = path.join(process.resourcesPath, '/app/db/example.db')
const db = new sqlite3.Database(dbFile)

但是,这样做之后,我也无法通过运行 .exe 加载 DB 文件。 ,我也不能通过运行 npm start .

问题:

我想知道存储我的数据库文件的正确方法是什么,以及如何在我的后端程序中写入它的路径(在本例中为 main.js)。谢谢。

最佳答案

运行 .exe 时,当前目录可能不同,因此相对路径将不正确。正如您发现的那样,您需要将完整路径放在一起,而不是 process.resourcesPath你应该使用 app.getAppPath() .

let dbFile = path.join(app.getAppPath(), 'app', 'db', 'example.db')

这应该是数据库文件的正确路径。您可能面临的另一个问题是 .exe通常会与 Asar 一起打包格式,它提供读访问但不提供写访问。因此,如果您需要写入数据库,最好将其放在其他地方。 electron.app.getPath(name) 提供了许多路径API,例如您可以使用 app.getPath("userData")获取为每个用户的应用程序数据提供的路径。在这种情况下,您的应用程序必须在该位置创建数据库文件。

关于sqlite - Electron-packager:打包后无法定位本地db文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42900015/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com