2016-02-05 60 views
3

我正在使用Electron和Node.js.我们开发了一个在Windows上工作正常的应用程序,并且需要将其打包到mac os中。我使用电子打包器打包应用程序,打包过程完成并生成打包。双击它会抛出mkdir权限被拒绝的错误,因为我使用node localstorage来维护用户本地机器上的一些设置。以某种方式mac不本地存储在应用程序的根目录中创建文件夹。在这件事上任何帮助都会很大。谢谢Electron Node.js节点localstorage osx mkdir权限被拒绝

+0

在应用程序的根?请显示一些代码。 –

+0

var LocalStorage = require('node-localstorage')。LocalStorage; var localStorage = new LocalStorage(“./ errorLogDb”); – Wajeeh

+0

尝试使用LocalStorage而不使用第二个命令,只需LocalStorage('akey','aValue');作为测试。 –

回答

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'存储在当前工作目录中,这可能取决于您的操作系统,应用程序的安装位置,执行它等等。

最后,在开发和测试期间区分“生产”应用程序和您的应用程序是一个好主意,因为您可能不希望为每个环境使用相同的存储文件夹。在任何情况下,只需写入'./errorLogDb'就可能会导致很多麻烦,所以我很感谢拒绝许可的错误。

+0

谢谢我会尝试更改文件夹的位置,根据您的建议,并会更新。 – Wajeeh

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... */ }