Electron 将我的应用程序数据存储在“userData”路径中

问题描述 投票:0回答:4

我正在构建并尝试部署打包的电子应用程序。对于我使用的包装

  • electron-packager
  • electron-installer-debian
  • electron-installer-dmg
  • electron-winstaller

我面临一个小问题,我必须将应用程序数据存储在我的用户计算机中的某个位置。

我看到好的做法是使用电子方法返回的路径中的文件夹

app.getPath('userData')

来自文档 存放应用程序配置文件的目录,默认为

appData
目录加上应用程序名称。

%APPDATA% on Windows
$XDG_CONFIG_HOME or ~/.config on Linux
~/Library/Application Support on macOS

根据我的测试,有时安装应用程序时不会自动创建此文件夹,有时是的,我想知道是否应该创建它。

现在,如果电脑中不存在此文件夹,我将退出应用程序,并使用以下代码

var DatasPath = app.getPath('userData')
if (!fs.existsSync(DatasPath)){
      process.exit()
  }

所以问题是

  • DatasPath
    文件夹不存在或“这样做是不好的做法”时,我是否应该使用
    fs.mkdirSync(DatasPath);
    文件夹创建它,如果我可以创建该文件夹,我必须警告用户我刚刚添加了该文件夹?
javascript node.js electron user-data
4个回答
3
投票

(将我的回复从“评论”扩展为“答案”)

我不知道我是否应该创建它,所以我会自动创建它 如果没有该文件夹,请退出应用程序

您似乎太字面地理解了“userData”?它不是一个名为“userData”的实际“文件夹”——它是操作系统为 that 应用程序存储数据的路径。

Electron
目前在 3 个操作系统上运行,每个操作系统的功能都不同。为了我们的方便,Electron通过创建包装器方法 app.getPath(name) 隐藏这些差异,以便相同的代码可以在每个操作系统上运行。

试试这个:将下面的行放入您的

main.js
脚本中:

console.log(app.getPath('userData'));

/用户/*********/库/应用程序支持/MyCoolApp

(“************”将是您的用户帐户名。)

更新:

main.js
中运行下面的代码,然后在“userData”路径指定的文件夹中查找

const fs = require("fs");
const path = require('path');
var datasPath = app.getPath('userData')
var data = "I am the cheese"
var filePath = path.join(datasPath, "savedData.txt")
fs.writeFileSync(filePath, data)

1
投票

pathConfig.js

function getAppDataPath() {
  switch (process.platform) {
    case "darwin": {
      return path.join(process.env.HOME, "Library", "Application Support", "myApp");
    }
    case "win32": {
      return path.join(process.env.APPDATA, "myApp");
    }
    case "linux": {
      return path.join(process.env.HOME, ".myApp");
    }
    default: {
      console.log("Unsupported platform!");
      process.exit(1);
    }
  }
}

const appPath = __dirname;
const appDataPath =
  !process.env.NODE_ENV || process.env.NODE_ENV === "production"
    ? getAppDataPath() // Live Mode
    : path.join(appPath, "AppData"); // Dev Mode

if (!fs.existsSync(appDataPath)) {
    // If the AppData dir doesn't exist at expected Path. Then Create
    // Maybe the case when the user runs the app first.
    fs.mkdirSync(appDataPath);
}

0
投票

在每个操作系统中,appData 文件夹都有不同的路径,获取此路径的完美方法是在主进程中调用 app.getPath('userData') 。 但是有一个包可以为您处理这个问题,它将数据存储在 JSON 文件中并在每次更改时更新它。 在我看来,这个包比你自己处理所有事情要好得多。 阅读更多 : https://www.npmjs.com/package/electron-data-holder


0
投票

只是澄清一下:实际上是 appdata/yourApp 或应用程序支持/yourApp 等..

已创建肯定,因为它保存了 Chromium 和 Electron 工作时使用的大量文件和文件夹。比如缓存、cookie 等...

© www.soinside.com 2019 - 2024. All rights reserved.