electron-vue 获取本地配置,修改存放目录
项目中使用了:本地配置,sqlite,log,这些都是需要我们自定义路径的,但是在获取路径时发生问题,以下是我的获取方法:
//background.js nodeIntegration: true //js const { app} = require(electron)
由于首次使用electron,对electron不熟悉,在调用引用app时一直报getPath为undefined ,
其实app在这里也根本没获取到
后面就想到主进程能使用app,那我在主进程中先获取,然后发送给渲染进程不就得了,以下是我的两种办法:
1.主进程发送给渲染进程
background.js
async function createWindow() { // Create the browser window. const win = new BrowserWindow({ width: 1800, height: 1000, //有边框 frame: true, //独占全屏 //fullscreen: true, webPreferences: { // Use pluginOptions.nodeIntegration, leave this alone // See nklayman.github.io/vue-cli-plugin-electron-builder/guide/security.html#node-integration for more info nodeIntegration: process.env.ELECTRON_NODE_INTEGRATION, contextIsolation: !process.env.ELECTRON_NODE_INTEGRATION, } }); //是否可以调解大小 //win.setResizable(false); //全屏,下方有任务栏 //win.maximize() if (process.env.WEBPACK_DEV_SERVER_URL) { // Load the url of the dev server if in development mode await win.loadURL(process.env.WEBPACK_DEV_SERVER_URL) //开启调试 if (!process.env.IS_TEST){ win.webContents.openDevTools() } } else { createProtocol(app) // Load the index.html when not in development win.loadURL(app://./index.html) } //获取配置文件,并发送给渲染进程 win.webContents.send(config-path, path.dirname(app.getAppPath())) }
最后一行是重点,这里的getAppPath(),也是app获取路径的一种方法,详情看
js
const { ipcRenderer } = require(electron) let BASE_DIR=null ; ipcRenderer.on(config-path,(a,b)=>{ BASE_DIR=b; })
这里有一个问题,只推送一次,如果刷新情况下,BASE_DIR会还原,这里的BASE_DIR就会出现null的情况.
2.主进程,渲染进程双向通信
background.js
async function createWindow() { // Create the browser window. const win = new BrowserWindow({ width: 1800, height: 1000, //有边框 frame: true, //独占全屏 //fullscreen: true, webPreferences: { // Use pluginOptions.nodeIntegration, leave this alone // See nklayman.github.io/vue-cli-plugin-electron-builder/guide/security.html#node-integration for more info nodeIntegration: process.env.ELECTRON_NODE_INTEGRATION, contextIsolation: !process.env.ELECTRON_NODE_INTEGRATION, } }); //是否可以调解大小 //win.setResizable(false); //全屏,下方有任务栏 //win.maximize() if (process.env.WEBPACK_DEV_SERVER_URL) { // Load the url of the dev server if in development mode await win.loadURL(process.env.WEBPACK_DEV_SERVER_URL) //开启调试 if (!process.env.IS_TEST){ win.webContents.openDevTools() } } else { createProtocol(app) // Load the index.html when not in development win.loadURL(app://./index.html) } //获取配置文件,并发送给渲染进程 //win.webContents.send(config-path, path.dirname(app.getAppPath())) } ipcMain.handle(get-path, () => { return path.dirname(app.getAppPath()) });
js
const { ipcRenderer } = require(electron) let BASE_DIR=null ; ipcRenderer.invoke(get-path).then((resul) => { BASE_DIR= resul; })
这种方式,就不存在刷新后BASE_DIR变null的情况
下一篇:
脚本执行jar包(使用自带jre)