2016-04-27 56 views
0

我有一個js應用程序(與Electron打包),我希望加載yaml文件。當我打包該應用程序時,以下方法可行,因爲app.getAppPath()允許我訪問app.asar文件,但在開發中它返回路徑\node_modules\electron-prebuilt\dist\resources\default_app.asar在javascript中訪問本地文件

fs.readFileSync(`${app.getAppPath()}/src/app/data/items.yml`, 'utf8') 

有沒有辦法解決這個問題?我的yaml文件不應該放在與應用程序其餘部分相同的目錄中嗎?

回答

1

使用path模塊以及__dirname內置來構建相對於源文件的資產的文件路徑,相對路徑在開發和打包構建之間不會改變。例如,假設以下目錄結構:

src/ 
    app/ 
    browser/ 
     main.js 
    data/ 
     items.yml 

您應該引用items.ymlmain.js像這樣:

path.join(__dirname, '..', 'data', 'items.yml') 
+0

我嘗試做'path.join(__目錄名稱,「items.en '' .yml')'從同一目錄下的'data.js'中獲取文件。這會返回'\ items.yml',當我用'fs.readFileSync'使用它時,它會嘗試檢索位於'C:\ items.yml'下的文件,該文件當然不在哪裏。我是否使用fs模塊錯誤,或者您將如何/應該從yml文件中獲取數據? – schwift

+0

@schwifty如果你想訪問同一個目錄中的文件,那麼它會是'path.join(__ dirname,'items.en.yml')'。然而,即使你寫了什麼,我不認爲'path.join()'應該只返回'\ items.yml',除非'__dirname'是空的,所以請檢查'__dirname'實際上設置在'data中。 js'。 –

+0

'__dirname'只是給了我'/' - 我現在在Windows上,如果這有什麼區別的話。 – schwift