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 ...
随机推荐
- 获取Visual Studio所用MSVC编译器版本:_MSC_VER数值
本文介绍查看Visual Studio软件_MSC_VER值的方法. _MSC_VER是微软公司推出的C/C++编译器--MSVC编译器的一个内置宏,其值表示当前Visual Studio软件 ...
- 超级AI助手:全新提升!中文NLP训练框架,快速上手,海量训练数据
"超级AI助手:全新提升!中文NLP训练框架,快速上手,海量训练数据,ChatGLM-v2.中文Bloom.Dolly_v2_3b助您实现更智能的应用!" 1.简介 目标:基于py ...
- Java多线程-ThreadPool线程池-3(五)
除了可以通过ThreadPoolExecutor自定义线程池外,同Stream API中的Collectors一样,多线程里的Executors类也提供了一组相关的线程池工具,可以直接拿来用,不用考虑 ...
- HanLP — 词性标注
词性(Part-Of-Speech,POS)指的是单词的语法分类,也称为词类.同一个类别的词语具有相似的语法性质 所有词性的集合称为词性标注集. 词性的用处 当下游应用遇到OOV时,可以通过OOV的词 ...
- gcc-11/g++-11安装
终端依次输入 sudo add-apt-repository ppa:ubuntu-toolchain-r/test #添加工具链存储库 sudo apt-get install gcc-11 #安装 ...
- go Printf 语句的占位符 Format
func main() { var a uint8 = 12 var b = "wokao" fmt.Printf("查看类型:%T\n", a) //查看类型 ...
- SQL中Between And的问题
使用Between And时需要注意的事项:(1)"between and"是包括边界值的,"not between"不包括边界值.(2)"betwe ...
- 开启未来创新之门:.NET Conf China 2023 精彩回顾及资料下载
2023年12月16日-17日,一年一度的 .NET Conf China 2023 中国 .NET 开发者大会在北京盛大举办!大会以第一天主会场 + AI..NET 8.云原生.IoT.前端& ...
- 【译】.NET 8 网络改进(一)
原文 | Máňa,Natalia Kondratyeva 翻译 | 郑子铭 随着新的 .NET 版本的发布,发布有关网络空间中新的有趣变化的博客文章已成为一种传统.今年,我们希望引入 HTTP 空间 ...
- NC16670 [NOIP2006]能量项链
题目链接 题目 题目描述 在Mars星球上,每个Mars人都随身佩带着一串能量项链.在项链上有N颗能量珠.能量珠是一颗有头标记与尾标记的珠子,这些标记对应着某个正整数.并且,对于相邻的两颗珠子,前一颗 ...