Electron хранит данные моего приложения в пути 'userData' - PullRequest
0 голосов
/ 05 апреля 2020

Я строю и пытаюсь развернуть упакованное электронное приложение. Для упаковки, которую я использовал

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

и я столкнулся с небольшой проблемой, когда мне нужно хранить данные appa где-нибудь на моем пользовательском компьютере.

Я увидел, что хорошей практикой является использование папки в пути, возвращаемом электронный метод app.getPath('userData').

из документов Это каталог для хранения файлов конфигурации приложения, который по умолчанию является каталогом appData, к которому добавляется имя приложения.

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

По моим тестам иногда эта папка не создается автоматически, когда приложение установлено, а иногда да, и мне интересно, должен ли я его создать.

Прямо сейчас я ' m выйти из приложения, если эта папка отсутствует в p c со следующим кодом

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

Так что вопрос

  • , если я создам DatasPath папка с fs.mkdirSync(DatasPath);, когда ее нет или это «плохая практика», и если я могу создать фолд или я должен предупредить пользователя, что я только что добавил эту папку?

Ответы [ 2 ]

1 голос
/ 05 апреля 2020

(Расширяя мой ответ от "комментария" до "ответа")

я не знаю, должен ли я его создать или нет, я автоматически завершать работу приложения, если эта папка отсутствует

Кажется, вы слишком буквально воспринимаете «userData»? Это не фактическая «папка» с именем «userData» - это путь, по которому операционная система хранит данные для приложения , . 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)
0 голосов
/ 06 апреля 2020

В 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);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...