浏览数(8620)
【ELECTRON本地配置文件】
Electron开发桌面应用少不了要记录一些简单的配置,即不值得弄数据库 ,又没必要存到线上服务器。
实际遇到的问题:本地要求存储最后登陆成功的帐号用户名 头像以及打印机配置。
离不开fs,还有LowDb等一系列可以用,但是会有一坨要加载的东西比较恶心。所以自己动手丰衣足食。
调试状态下直接fs读写丝毫没有问题。打包后无法生成相关配置文件。
文档提到了userData目录,当然我比较菜没搞明白。如果有人找到相关文档,可以留言发我。
坚持不走寻常路,下面讲一下我的方案,仅供参考,如有不足请斧正。
我用logger做了必要的日志,当然这是为了便于开发调试。对我又在这条不归路上启程了。
let fs = require('fs');
let options = {
flags: 'w+', // 模式
encoding: 'utf8', // utf8编码
};
try{//安装后程序目录不会有任何配置文件,会报错,遂屏蔽之。
var data=fs.readFileSync('./a.log').toString();
}catch(err){
var data=false;
}
if(data&&data.length>3){
let stdout = fs.createWriteStream('./a.dat', options);
let stderr = fs.createWriteStream('./a.dll', options);//win下dll后缀无法写入,很神奇,有时间了再研究。
let logger = new console.Console(stdout, stderr);//创建LOGGER
logger.log(data);//这里日志可以写入到文件,我也不知道为啥,自己写的大概不对,此处需要去仔细看实现。
}
try{
var data=fs.readFileSync('./b.log').toString();
}catch(err){
var data=false;
}
if(data&&data.length>3){
let stdout = fs.createWriteStream('./b.dll', options);
let stderr = fs.createWriteStream('./b.dat', options); let logger = new console.Console(stdout, stderr);
logger.error(data);
}
logger=null;
stdout = fs.createWriteStream('./a.log', options);
//createWriteStream 打开后内容就清空了,所以才需要上面持久化到别的文件。
stderr = fs.createWriteStream('./b.log', options);
logger = new console.Console(stdout, stderr);
exports.log = function(msg) {//此处我是单独文件引用便于主进程内调用。
logger.log(msg);
return true;
}
exports.error = function(msg) {
logger.error(msg);
return true;
}
win7下测试可以选择安装到缓存目录AppData也可以安装到Program Files。目前都可以,我开发的是收银软件,win10就不测了。
新手遇到问题只能闭门造车。
#1楼 回复: 主题 2019-05-20 19:47:17 这地方撒 回复 |