Ошибка при открытии моего упакованного приложения Node.js, нет ошибки при открытии неупакованного приложения

Мое приложение работает до тех пор, пока я запускаю его с помощью строки терминала / cmd. Теперь я упаковал приложение с помощью электронного упаковщика, но я получаю следующие две ошибки:

Uncaught Exception:
Error: ENOENT: no such file or directory, open 'settings.json'

А также:

Uncaught Exception:
SyntaxError: Unexpected token u in JSON at position 0
    at JSON.parse (<anonymous>)
    at ReadFileContext.fs.readFile [as callback] (/Users/zeno/Applications/splyr-cop/dist/splyr-cop-darwin-x64/splyr-cop.app/Contents/Resources/app.asar/main.js:202:21)
    at FSReqWrap.readFileAfterOpen [as oncomplete] (fs.js:359:13)

Эти ошибки происходят только в упакованной версии приложения. Я предполагаю, что это как-то связано с путями settings.json и billing.json:

const path = require('path');
var settings = path.resolve('./settings.json');
var billing = path.resolve('./billing.json');

Оба.json размещены прямо в папке приложения.

Согласно FAQ электронного упаковщика, это распространенная ошибка (см. Здесь).

Они рекомендуют что-то вроде этого:

`AppName

Package── package.json

Data── данные -> somedata.json

└── src -> main.js

В src/main.js вы должны получить доступ к data/somedata.json, подобному следующему:

const path = require('path');
const jsonFilename = path.resolve(__dirname, '..', 'data', 'somedata.json');
console.log(require(jsonFilename));

Также пытался использовать const вместо var, но это просто приводит к другой ошибке. Приложение должно внести изменения в settings.json.

Строка 202 выглядит следующим образом (202 - это: profile = JSON.parse(data);)

ipcMain.on('setupUi', function(event) {
  fs.readFile('settings.json', (err, data) => {
              if(err){throw err;} else{
              settings = JSON.parse(data);
              mainWin.webContents.send('setupUi', JSON.parse(data));
              }
  });
  fs.readFile( 'billing.json', (err, data) => {
    profiles = JSON.parse(data);
    for (p in profiles) {
      switch(profiles[p].country) {
        case 'US':
          profilesUS[p] = profiles[p];
          break;
        case 'UK':
          profilesUK[p] = profiles[p];
      }
    }
  });
})

Также пробовал "var settings = path.resolve(__dirname, 'settings.json');" и т.д., ничего не получалось.

Может быть, что-то не так с "settings = JSON.parse(data);"?

Я очень признателен за любую помощь, я пытался исправить это в течение нескольких часов.

0 ответов

Другие вопросы по тегам