Ошибка при открытии моего упакованного приложения 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);"?
Я очень признателен за любую помощь, я пытался исправить это в течение нескольких часов.