2016-04-27 11 views
0

私はyamlファイルをロードしたいjsアプリ(Electronと一緒にパッケージ化されている)を持っています。 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 

あなたはとても似main.jsitems.ymlを参照しなければなりません: ''「、私は `path.join(__ dirnameのを、やろう

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

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

関連する問題