Electron打包设置,安装完成后可修改配置项

Electron 本地部署 IP 配置方案

为方便本地部署时修改服务器地址,在安装目录中提供可自定义的配置文件,无需重新打包即可更换IP。

1. 创建配置文件

文件目录结构:
配置文件目录

配置文件内容(application.properties):

ip=http://192.168.110.61:8886
websocket=192.168.110.61:8886

2. 配置文件读写实现

index.js 核心代码:

const fs = require("fs");
const path = require("path");
const ini = require("ini");

const nodeServePath = process.cwd();
const isDev = process.env.NODE_ENV === "development";
let filePath = "";
let resourcesPath = "";

// 读取配置文件
export function readFile(exePath) {
  resourcesPath = path.dirname(exePath) + path.sep;
  filePath = isDev 
    ? path.join(resourcesPath, "/conf/application.properties")
    : path.join(resourcesPath, "/conf/application.properties");
    
  return new Promise((resolve, reject) => {
    fs.readFile(filePath, "utf8", (err, dataStr) => {
      if (err) return reject(err.message);
      resolve(ini.parse(dataStr.toString()));
    });
  });
}

// 修改配置文件
export function writeFile(config) {
  return new Promise((resolve, reject) => {
    fs.writeFile(filePath, ini.stringify(config), (err) => {
      if (err) return reject(err.message);
      resolve("写入成功");
    });
  });
}

3. 在 Electron 主进程中调用

background.js 示例:

import { app } from "electron";
import { readFile } from "./electron/config";

// 初始化时加载配置
readFile(app.getAppPath()).then((res) => {
    config = res;
    electronStore.set("configFile", res);
});

4. 项目中获取配置

const ElectronStore = require("electron-store");
const electronStore = new ElectronStore({ encryptionKey: "r23rfdsa" });
electronStore.get("configFile");

5. 打包配置

在 vue.config.js 中添加:

pluginOptions: {
  electronBuilder: {
    builderOptions: {
      extraResources: ["./conf"]
    }
  }
}

打包配置截图

6. 安装后文件位置

安装目录结构:
安装目录

配置文件路径:
resources/conf/application.properties
配置文件路径

修改配置后重启应用即可生效electron本地部署可能会存在不同服务器地址,就需要更换ip,更换ip就要再次打包,安装后在安装目录暴露一个可配置的自定义配置文件,用于更换ip。

1.创建当前最外层文件夹

文件目录:
在这里插入图片描述

文件内容:

ip=http://192.168.110.61:8886
websocket=192.168.110.61:8886

2.读取文件内容

创建index.js 文件,exepath这是安装地址,可通过app.getAppPath()获取。
文件内容:

//引入node原生fs模块
const fs = require("fs");
// 引入node内置的path模块
const path = require("path");
//引入node原生读写配置
const ini = require("ini");
/* 执行node命令时候的文件夹地址 */
const node_serve_path = process.cwd();
/* 判断是否是生产环境 */
const isDev = process.env.NODE_ENV === "development";
/* 需要读写的文件地址 */
let file_path = "";
let resourcesPath = "";

// 读取配置文件
export function readFile(exepath) {
  resourcesPath = path.dirname(exepath) + path.sep;
  file_path = isDev
    ? path.join(resourcesPath, "/conf/application.properties")
    : path.join(resourcesPath, "/conf/application.properties");
  return new Promise((resolve, reject) => {
    fs.readFile(file_path, "utf8", function (err, dataStr) {
      if (err) return reject(err.message); //读取失败
      /* application.properties  文件内容符合ini配置文件的格式,
      就可以通过ini.parse把读取到的文件转成js可识别的对象 */
      resolve(ini.parse(dataStr.toString()));
    });
  });
}
// 更改配置文件
export function writeFile(config) {
  return new Promise((resolve, reject) => {
    fs.writeFile(file_path, ini.stringify(config), function (err) {
      if (err) return reject(err.message); //写入失败
      resolve("写入成功");
    });
  });
}
  1. 调用在background.js 文件中调用
import { app, protocol, BrowserWindow, ipcMain, dialog } from "electron";
import { readFile } from "./electron/config";

// 执行完成后new BrowserWindow 调用
// 加载配置文件
readFile(app.getAppPath()).then((res) => {
    config = res;
    // 获取后存在electronStore 里面
    electronStore.set("configFile", res);
})
  1. 在项目中获取
const ElectronStore = require("electron-store");
const electronStore = new ElectronStore({ encryptionKey: "r23rfdsa" });
electronStore.get("configFile");
  1. 打包部分,在pluginOptions=>electronBuilder=>builderOptions增加extraResources: [“./conf”]

在这里插入图片描述

6. 打包安装后的文件目录和文件地址

在这里插入图片描述

文件地址在安装目录 resources/conf 下面

在这里插入图片描述

修改文件后重启软件,即刻生效

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

起个名字不容易啊

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值