我正在使用Electron和Node.js.我们开发了一个在windows上运行良好的应用程序,并且必须将其打包为mac os。我使用electronic-packager打包应用程序,打包完成包并生成包。双击它会抛出mkdir权限被拒绝的错误,因为我使用node localstorage来维护用户本地计算机上的某些设置。不知何故,mac没有本地存储来在应用程序的根目录中创建文件夹。在这件事上的任何帮助都会很棒。感谢
答案 0 :(得分:2)
首先,主进程或渲染器进程中的代码是否有问题?如果是后者,则不需要使用“node-localstorage”,因为您可以使用渲染器的本机LocalStorage。如果您处于主要流程中,那么您需要提供自己的存储策略,因此使用“node-localstorage”是一个可行的选择。
无论如何,您需要仔细考虑存储数据的位置;对于初学者,让我们看一下Electron的渲染器进程将存储其LocalStorage数据的位置:这根据操作系统的不同而不同,但您可以get and set the paths using the app
module - 有问题的路径是userData
,在OS X上会默认到~/Library/Application Support/<App Name>
。 Electron使用该文件夹来保存cookie,缓存,LocalStorage等。所以我建议也使用该文件夹。 (否则,请参阅XDG默认值以获得良好的默认值)
您上面的示例是将“errorLogDb”存储在当前工作目录中,这可能取决于您的操作系统,安装App的位置,执行方式等等。
最后,在开发和测试期间区分“生产”应用和应用是个不错的主意,因为您可能不希望为每个环境使用相同的存储文件夹。在任何情况下,只要写入'./errorLogDb'可能会引起很多麻烦,所以我要感谢许可被拒绝的错误。
答案 1 :(得分:0)
这个策略对我有用:
const { LocalStorage } = require('node-localstorage');
let ls;
mb.on('ready', () => {
let prefsPath = mb.app.getPath('userData') + '/prefs';
ls = new LocalStorage(prefsPath);
loadPrefs();
});
mb.on('after-create-window', () => { /* ls... */ }
exports.togglePref = () => { /* ls... */ }