0

只要我使用终端/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 都直接放在应用程序的文件夹中。

根据 electron-packager 的常见问题解答,这是一个常见错误(请参阅此处)

他们推荐这样的东西:

`应用名称

├── package.json

├── 数据 -> 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 为:profiles = 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);”出了点问题?

我真的很感激任何帮助,我已经尝试解决这个问题好几个小时了。

4

0 回答 0