electron暴露配置文件(用户可随时修改)
配置文件
一般web前端项目配置文件,写死的放在src/config下,需要打包配置的放在.env文件中。但在electron项目中,如果配置数据更改,需要每次给用户打包升级肯定是行不通的。于是外部配置文件就是有必要的,具体实现方法也比较简单,通过fs去读写外部文件就可实现
具体实现
设置文件不被压缩混淆
比如配置文件放在根目录的config文件夹
配置electron- builder文件,我这里是yml配置
...
productName: xxx
asarUnpack:
- resources/**
extraResources:
- ./config
...
在extraResources属性添加文件夹名称
打包后路径为/resources/config/...可以打包后查看
获取路径
process.cwd()
此时获取是node服务的根路径,再拼接上本地文件的路径
dev环境为项目根目录
prod环境为安装后文件夹路径
const path = process.cwd()
const filePath = is.dev
? join(path, '/config/app.properties)
: join(path, '/resources/config/app.properties')
读写文件
这里用到了fs、path、ini等node模块,所以不可以在renderer里面操作,要通过主进程handle通信到渲染进程获取
npm i ini
class ConfigHandle {
private getConfig(_: IpcMainInvokeEvent) {
return new Promise((resolve, reject) => {
fs.readFile(filePath, 'utf8', function (err, dataStr) {
if (err) {
return reject(err.message)
}
resolve(ini.parse(dataStr.toString()))
})
})
}
private setConfig(_: IpcMainInvokeEvent, config) {
return new Promise((resolve, reject) => {
fs.readFile(filePath, 'utf8', function (err, dataStr) {
if (err) {
return reject(err.message)
}
const origin = ini.parse(dataStr.toString())
// 这里做了先读取再assign操作,不会全量覆盖
fs.writeFile(filePath, ini.stringify(Object.assign(origin, config)), function (err) {
if (err) {
return reject(err.message)
}
resolve('success')
})
})
})
}
register() {
ipcMain.handle('get-config', this.getConfig)
ipcMain.handle('set-config', this.setConfig)
}
}
通信到renderer
- main
configHandle.register()
- preload
const api = {
config: {
get: () => ipcRenderer.invoke('get-config'),
set: (config: object) => ipcRenderer.invoke('set-config', config)
}
}
contextBridge.exposeInMainWorld('api', api)
- renderer
export const config = await window.api.config.get()
export const setConfig = config => window.api.config.set(config)
const baseUrl = config.baseUrl
setConfig({baseUrl: "http://xxx"})
这样可以通过程序修改配置文件,或者用户自己编辑修改配置文件
- config/app.properties
title=good title
baseUrl=great url
defaultPassword=unbelievable pwd
通过ini.parse会转成json格式,非常方便
electron暴露配置文件(用户可随时修改)的更多相关文章
- phpmyadmin配置文件权限错误,不应任何用户都能修改
访问phpmyadmin提示“配置文件权限错误,不应任何用户都能修改” 原因:phpmyadmin目录权限过高,设置了777访问权限 解决: $ phpmyadin 转自: http://www.it ...
- Linux学习之CentOS(二十二)--单用户模式下修改Root用户的密码
在上一篇随笔里面详细讲解了Linux系统的启动过程 (Linux学习之CentOS(二十一)--Linux系统启动详解),我们知道Linux系统的启动级别一共有6种级别,通过 /etc/inittab ...
- centos单用户模式:修改ROOT密码和grub加密
centos单用户模式:修改ROOT密码和grub加密 CentOSLinux网络应用配置管理应用服务器 Linux 系统处于正常状态时,服务器主机开机(或重新启动)后,能够由系统引导器程序自动引导 ...
- Linux单用户模式(修改密码、运行级别)方法详解
很多新手当面对"忘记 root 账户密码导致无法登陆系统"这个问题时,直接选择重新系统.其实大可不必,我只需要进入 emergency mode(单用户模式)更新 root 账户的 ...
- MVC5 网站开发之七 用户功能 3用户资料的修改和删除
这次主要实现管理后台界面用户资料的修改和删除,修改用户资料和角色是经常用到的功能,但删除用户的情况比较少,为了功能的完整性还是坐上了.主要用到两个action "Modify"和& ...
- 微信开发第5章 通过accesstoken获取用户基本信息并修改用户备注
在关注者与公众号产生消息交互后,公众号可获得关注者的OpenID(加密后的微信号,每个用户对每个公众号的OpenID是唯一的.对于不同公众号,同一用户的openid不同).公众号可通过本接口来根据Op ...
- ASP.NET MVC+EF框架+EasyUI实现权限管理系列(19)-用户信息的修改和浏览
原文:ASP.NET MVC+EF框架+EasyUI实现权限管理系列(19)-用户信息的修改和浏览 ASP.NET MVC+EF框架+EasyUI实现权限管系列 (开篇) (1):框架搭建 ...
- 在单用户模式下修改CentOS的root密码
我们在使用CentOS的过程中可能会发生忘记root用户密码的情况,本文就从应用的角度简单介绍一下如何在单用户模式下修改root用户的密码. 开启CentOS,进入系统启动菜单 将光标停留在系统开机时 ...
- CentOS6.8单用户模式下修改密码
CentOS6.8单用户模式下修改密码 1. 选择进入菜单menu界面,在开启系统出现如下界面时,按Esc键(只需按一下) 2. 然后进入到如下界面 3. 上图中红色矩形类的内容,按“a”键可以修改内 ...
- linux 用户/用户组添加修改删除(ubuntu/centos)
一.LINUX(UBUNTU/CENTOS)用户添加删除修改 1.建用户: adduser web //新建web用户 useradd web ...
随机推荐
- Fabric配置块结构解析
本文是区块链浏览器系列的第二篇. 上一篇介绍了交易块中的数据结构,这一篇介绍区块链网络中的配置块数据结构. 这两种区块中数据结构内容的区别主要Payload结构体中的Data域中的内容,接下来将以类图 ...
- 2.7 CE修改器:多级指针查找
在本步骤中,你需要使用多级指针的概念来查找健康值真正的地址并修改它.多级指针就是一个指针的指针,也就是第一个指针指向第二个指针,第二个指针指向第三个指针,以此类推,最终指向你想要访问的地址. 首先,你 ...
- 4.3 C++ Boost 日期时间操作库
Boost 库是一个由C/C++语言的开发者创建并更新维护的开源类库,其提供了许多功能强大的程序库和工具,用于开发高质量.可移植.高效的C应用程序.Boost库可以作为标准C库的后备,通常被称为准标准 ...
- “I/O多路复用”和“异步I/O”的前世今生
曾经的VIP服务在网络的初期,网民很少,服务器完全无压力,那时的技术也没有现在先进,通常用一个线程来全程跟踪处理一个请求.因为这样最简单.其实代码实现大家都知道,就是服务器上有个ServerSocke ...
- 使用Nuget快速集成.Net三维控件
据老一辈的程序员说开发三维程序门槛很高,需要学若干年才能入门,自从遇上AnyCAD三维控件后,开发三维应用变的简单了.当结合nuget后,一切更简单了. 1 准备工作 安装VS201x以后,就可以开始 ...
- 苹果新一代“超级芯片”曝光:M3 Ultra最高可达32核CPU
近日,据外媒消息,苹果计划在2024年推出新一代"超级芯片"M3 Ultra. 据悉,M3 Ultra将大幅增加CPU核心数量,同时GPU核心数量也将适度增加. 具体来说,M3 U ...
- Docker从认识到实践再到底层原理(一)|技术架构
前言 那么这里博主先安利一些干货满满的专栏了! 首先是博主的高质量博客的汇总,这个专栏里面的博客,都是博主最最用心写的一部分,干货满满,希望对大家有帮助. 高质量博客汇总 然后就是博主最近最花时间的一 ...
- Spring boot 的定时任务。
@Scheduled(fixedRate=2000):上一次开始执行时间点后2秒再次执行: @Scheduled(fixedDelay=2000):上一次执行完毕时间点后2秒再次执行: @Schedu ...
- 《ASP.ENT Core 与 RESTful API 开发实战》-- (第5章)-- 读书笔记(中)
第 5 章 使用 Entity Framework Core 5.3 重构仓储类 创建一个通用仓储接口 namespace Library.API.Services { public interfac ...
- Pandas字符串离散化处理
字符串离散化处理 import pandas as pd import numpy as np from matplotlib import pyplot as plt # 读取csv文件 file_ ...