2016-02-05 58 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... */ }