配置文件

一般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')

读写文件

这里用到了fspathini等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暴露配置文件(用户可随时修改)的更多相关文章

  1. phpmyadmin配置文件权限错误,不应任何用户都能修改

    访问phpmyadmin提示“配置文件权限错误,不应任何用户都能修改” 原因:phpmyadmin目录权限过高,设置了777访问权限 解决: $ phpmyadin 转自: http://www.it ...

  2. Linux学习之CentOS(二十二)--单用户模式下修改Root用户的密码

    在上一篇随笔里面详细讲解了Linux系统的启动过程 (Linux学习之CentOS(二十一)--Linux系统启动详解),我们知道Linux系统的启动级别一共有6种级别,通过 /etc/inittab ...

  3. centos单用户模式:修改ROOT密码和grub加密

    centos单用户模式:修改ROOT密码和grub加密 CentOSLinux网络应用配置管理应用服务器  Linux 系统处于正常状态时,服务器主机开机(或重新启动)后,能够由系统引导器程序自动引导 ...

  4. Linux单用户模式(修改密码、运行级别)方法详解

    很多新手当面对"忘记 root 账户密码导致无法登陆系统"这个问题时,直接选择重新系统.其实大可不必,我只需要进入 emergency mode(单用户模式)更新 root 账户的 ...

  5. MVC5 网站开发之七 用户功能 3用户资料的修改和删除

    这次主要实现管理后台界面用户资料的修改和删除,修改用户资料和角色是经常用到的功能,但删除用户的情况比较少,为了功能的完整性还是坐上了.主要用到两个action "Modify"和& ...

  6. 微信开发第5章 通过accesstoken获取用户基本信息并修改用户备注

    在关注者与公众号产生消息交互后,公众号可获得关注者的OpenID(加密后的微信号,每个用户对每个公众号的OpenID是唯一的.对于不同公众号,同一用户的openid不同).公众号可通过本接口来根据Op ...

  7. ASP.NET MVC+EF框架+EasyUI实现权限管理系列(19)-用户信息的修改和浏览

    原文:ASP.NET MVC+EF框架+EasyUI实现权限管理系列(19)-用户信息的修改和浏览  ASP.NET MVC+EF框架+EasyUI实现权限管系列 (开篇)   (1):框架搭建    ...

  8. 在单用户模式下修改CentOS的root密码

    我们在使用CentOS的过程中可能会发生忘记root用户密码的情况,本文就从应用的角度简单介绍一下如何在单用户模式下修改root用户的密码. 开启CentOS,进入系统启动菜单 将光标停留在系统开机时 ...

  9. CentOS6.8单用户模式下修改密码

    CentOS6.8单用户模式下修改密码 1. 选择进入菜单menu界面,在开启系统出现如下界面时,按Esc键(只需按一下) 2. 然后进入到如下界面 3. 上图中红色矩形类的内容,按“a”键可以修改内 ...

  10. linux 用户/用户组添加修改删除(ubuntu/centos)

    一.LINUX(UBUNTU/CENTOS)用户添加删除修改 1.建用户: adduser web                             //新建web用户 useradd web  ...

随机推荐

  1. 获取Visual Studio所用MSVC编译器版本:_MSC_VER数值

      本文介绍查看Visual Studio软件_MSC_VER值的方法.   _MSC_VER是微软公司推出的C/C++编译器--MSVC编译器的一个内置宏,其值表示当前Visual Studio软件 ...

  2. 超级AI助手:全新提升!中文NLP训练框架,快速上手,海量训练数据

    "超级AI助手:全新提升!中文NLP训练框架,快速上手,海量训练数据,ChatGLM-v2.中文Bloom.Dolly_v2_3b助您实现更智能的应用!" 1.简介 目标:基于py ...

  3. Java多线程-ThreadPool线程池-3(五)

    除了可以通过ThreadPoolExecutor自定义线程池外,同Stream API中的Collectors一样,多线程里的Executors类也提供了一组相关的线程池工具,可以直接拿来用,不用考虑 ...

  4. HanLP — 词性标注

    词性(Part-Of-Speech,POS)指的是单词的语法分类,也称为词类.同一个类别的词语具有相似的语法性质 所有词性的集合称为词性标注集. 词性的用处 当下游应用遇到OOV时,可以通过OOV的词 ...

  5. gcc-11/g++-11安装

    终端依次输入 sudo add-apt-repository ppa:ubuntu-toolchain-r/test #添加工具链存储库 sudo apt-get install gcc-11 #安装 ...

  6. go Printf 语句的占位符 Format

    func main() { var a uint8 = 12 var b = "wokao" fmt.Printf("查看类型:%T\n", a) //查看类型 ...

  7. SQL中Between And的问题

    使用Between And时需要注意的事项:(1)"between and"是包括边界值的,"not between"不包括边界值.(2)"betwe ...

  8. 开启未来创新之门:.NET Conf China 2023 精彩回顾及资料下载

    2023年12月16日-17日,一年一度的 .NET Conf China 2023 中国 .NET 开发者大会在北京盛大举办!大会以第一天主会场 + AI..NET 8.云原生.IoT.前端& ...

  9. 【译】.NET 8 网络改进(一)

    原文 | Máňa,Natalia Kondratyeva 翻译 | 郑子铭 随着新的 .NET 版本的发布,发布有关网络空间中新的有趣变化的博客文章已成为一种传统.今年,我们希望引入 HTTP 空间 ...

  10. NC16670 [NOIP2006]能量项链

    题目链接 题目 题目描述 在Mars星球上,每个Mars人都随身佩带着一串能量项链.在项链上有N颗能量珠.能量珠是一颗有头标记与尾标记的珠子,这些标记对应着某个正整数.并且,对于相邻的两颗珠子,前一颗 ...