首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用ElectronJS编写JSON文件(asar)

用ElectronJS编写JSON文件(asar)
EN

Stack Overflow用户
提问于 2020-10-01 17:20:05
回答 1查看 516关注 0票数 1

问题

FrameWork - ElectronJS

我的程序使用.json文件来保存用户输入的数据。在开发环境中,这些文件写得很好,但是在用electron-packager打包之后,JSON文件就不再写了,这完全使我的程序无效。

我主要使用这些JSON文件来编写我的程序,所以完全删除它们将再次从头开始编写程序。有没有办法让程序在客户端PC中像在开发环境中一样写入JSON文件。

示例程序

这只是一个示例程序,但我的所有代码都是这种格式。

代码语言:javascript
复制
//JavaScript 

//This Javascript catches user inputs and send them to jsonWriter function


document.getElementById("save").addEventListener('click', async function(e) {
  e.preventDefault()

  var userData = document.getElementById('username').value
  var acctData = document.getElementById('account').value

  var formData = {
    username: userData,
    account: acctData
  }; // create JS object

  await writer.jsonLC(formData);
});


// This is my json Writer function

async function jsonForAuth(data){

    let element = JSON.stringify(data);
    fs.writeFileSync(__dirname + '\\data\\auth.json', element) 

//All my directory for 'fs' are written in such format with a '__dirname'

}

module.exports.jsonLC = jsonForAuth;

// All of this works perfectly on dev-environment (VS-Code)

现在我用electron-packager将其打包

代码语言:javascript
复制
// Here is my package.json for reference

{
  "name": "electron_app",
  "productName": "Test App",
  "version": "1.0.0",
  "description": "",
  "main": "main.js",
  "dependencies": {
    "asar": "^3.0.3",
    "axios": "^0.20.0",
    "fs-extra": "^9.0.1",
    "jwt-decode": "^3.0.0-beta.2",
    "keytar": "^6.0.1",
    "node-fetch": "^2.6.1",
    "puppeteer-core": "^5.3.0"
  },
  "devDependencies": {
    "electron": "^10.1.2",
    "electron-packager": "^15.1.0"
  },
  "scripts": {
    "start": "electron .",
    "package-mac": "electron-packager . --overwrite --platform=darwin --arch=x64 --icon=assets/icons/mac/icon.icns --prune=true --out=release-builds",
    "package-win": "electron-packager . electron_app --overwrite --asar --platform=win32 --arch=x64 --icon=assets/img/icons/win/icon.ico --prune=true --out=release-builds --version-string.CompanyName=CE --version-string.FileDescription=CE --version-string.ProductName=\"Test App\"",
    "package-linux": "electron-packager . electron-tutorial-app --overwrite --asar=true --platform=linux --arch=x64 --icon=assets/icons/png/1024x1024.png --prune=true --out=release-builds"
  },
  "keywords": [],
  "author": "",
  "license": "ISC"
}

打包代码与This guide here完全相同。

结论

现在,将应用程序和一些不需要json files的脚本打包后,就可以正常工作了。但是现在上面的sample program变得无用了,因为不再创建json文件了。

**如何实现?**

Note: I have NOT used ipcRenderer() anywhere in my program.

更新

我发现asar是只读文件。

那么有没有办法把我的json保存位置改成Local/Appdata呢?

谢谢你,如果你的解释太大了,我很抱歉。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-10-01 19:05:54

是的,写入应用程序位置并不是一个好主意,而且通常是被禁止的。使用appdata文件夹应该足够了,该文件夹通常用于应用程序设置等。

app.getPath(name)是您要查找的函数。

然后做一些类似的事情:

代码语言:javascript
复制
fs.writeFileSync(app.getPath("appData") + "/auth.json", element);

或者甚至更好,使用path

代码语言:javascript
复制
fs.writeFileSync(path.join(app.getPath("appData"), "auth.json"), element);
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64152400

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档