2016-04-27 60 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