Включить папку и файлы внутри нее для сборки в электронном виде с помощью программы electronic-builder?

У меня есть несколько файлов JSON в каталоге с именем data в рабочем каталоге моего проекта Electron. Мне удалось создать приложение с использованием electron-build со следующей конфигурацией (package.json).

{
  "name": "My App",
  "version": "0.0.9",
  "description": "TEST DESC",
  "main": "main.js",
  "scripts": {
    "start": "electron .",
    "pack": "build --dir",
    "dist": "build"
  }
  "author": "Test",
  "license": "CC0-1.0",
  "build": {
    "appId": "test.tester.test",
    "directories": {
      "app": ""
    },
    "extraFiles": [
      "data"
    ],
    "dmg": {
      "contents": [
        {
          "x": 110,
          "y": 150
        },
        {
          "x": 240,
          "y": 150,
          "type": "link",
          "path": "/Applications"
        }
      ]
    },
    "win": {
      "target": "squirrel",
      "icon": "build/icon.ico"
    }
  },
  "devDependencies": {
    "electron": "~1.7.8",
    "electron-builder": "^20.11.1"
  },
  "dependencies": {
    "electron-settings": "^3.1.4",
    "jquery": "^3.3.1",
    "leveldown": "^3.0.0",
    "mkdirp": "^0.5.1",
    "shelljs": "^0.8.1"
  }
}

Я полагаю, что каталог data не добавляется в файл сборки. Потому что я использую файлы внутри каталога data для рендеринга представлений в приложении, которое не работает во встроенном приложении. Пожалуйста, предложите решение.

Я использую эти файлы JSON внутри приложения следующим образом:

fs.readFile('./data/userdata.json', 'utf8', function readFileCallback(err, data) {      
    if(data == '') { data = '[]'; }
    var users = JSON.parse(data);

    //Render Code
});

person Abhijith C S    schedule 05.05.2018    source источник
comment
Кстати, вы можете увидеть, включается ли он вообще, заглянув в каталог установки: /Users/username/AppData/Local/Programs/appname/resources/app. Вот где он находится в Windows, хотя я не уверен, где он находится для Mac или Linux.   -  person Joshua    schedule 06.05.2018
comment
Эти файлы доступны только для чтения или вы редактируете эти файлы json (если только для чтения, вы можете оставить их в asar)? Ваш атрибут extraFiles выглядит немного странно. Ваш массив должен содержать объекты этого типа: { from: 'sourcePattern', to: 'targetPattern'}   -  person Rhayene    schedule 07.05.2018
comment
попробуйте методы app.getAppPath () и app.getPath. electronicjs.org/docs/api/app#appgetapppath   -  person feedpanda    schedule 08.05.2018


Ответы (1)


"build": {
    "extraResources": [
        {
            "from": "data",
            "to": "data"
        }
    ]
}

После добавления, как это, Electron-builder скопирует папку данных в ресурс / данные приложения после упаковки приложения. Чтобы вы могли читать файлы с этим.

const dataPath =
  process.env.NODE_ENV === 'development'
    ? path.join(__dirname, '../../data')
    : path.join(process.resourcesPath, 'data');

fs.readFile(path.join(dataPath,'userdata.json', 'utf8', function readFileCallback(err, data) {      
  if(data == '') { data = '[]'; }
  var users = JSON.parse(data);

  //Render Code
});
person tpikachu    schedule 03.01.2020
comment
есть ли способ поместить папку в основной каталог (например, project/data), а не в каталог ресурсов (например, project/resources/data)? - person oldboy; 10.02.2020
comment
на самом деле я понял это, я могу просто изменить его на "to": "../projects". знаете ли вы, что .. также проходит вверх в Linux и MacOS ?? - person oldboy; 10.02.2020