只要我使用终端/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');
根据 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);”出了点问题?
我真的很感激任何帮助,我已经尝试解决这个问题好几个小时了。