回答:
これを試して:
fs.readFile(__dirname + '/../../foo.bar');
相対パスの先頭にあるスラッシュに注意してください。
__dirname
がよりというようなもの'/foo/bar'
であったと仮定してい'/foo/bar/'
ます。
__dirname
ように見えるかもしれ/path/to/your/dir
あなたが言うならば、__dirname + ".."
それはある/path/to/your/dir..
のではなく、存在しないディレクトリです、/path/to/your
。スラッシュは重要です。
path.join http://nodejs.org/docs/v0.4.10/api/path.html#path.joinを使用します
var path = require("path"),
fs = require("fs");
fs.readFile(path.join(__dirname, '..', '..', 'foo.bar'));
path.join()
先頭/末尾のスラッシュを処理して正しいことを行うだけで、末尾のスラッシュが存在する場合と存在しない場合を覚えておく必要はありません。
path.join
は正しい方法です、受け入れられた答えは従うべきではありません。それは、特にno-path-concatのルールでさえトリガーeslint
しますairbnb-base preset
__dirname
はhost/src/folder
そうでしたhost/folder
、そして私は必要でした、そしてこれは私にとってうまくいきました、OPの答えではありませんでした。
path.join(__dirname, '..', '..', 'foo.bar')
私はそれが少しうるさいことを知っていますが、これまでのすべての答えはまったく正しくありません。
path.join()の要点は、呼び出し元が使用するディレクトリ区切り文字を知る必要をなくすことです(コードプラットフォームに依存しない)。
技術的には正しい答えは次のようになります。
var path = require("path");
fs.readFile(path.join(__dirname, '..', '..', 'foo.bar'));
私はこれをアレックスウェインの回答へのコメントとして追加したでしょうが、まだ十分な担当者ではありません!
編集:user1767586の観察に従って
最も簡単な方法は次のようにすることpath.resolve
です:
path.resolve(__dirname, '..', '..');
../
パスに
path
モジュールが必要なようです。(path.normalize
特に)
var path = require("path"),
fs = require("fs");
fs.readFile(path.normalize(__dirname + "/../../foo.bar"));
親がどこにいるのかが分からない場合は、これでパスがわかります。
var path = require('path'),
__parentDir = path.dirname(module.parent.filename);
fs.readFile(__parentDir + '/foo.bar');
これも機能します:
fs.readFile(`${__dirname}/../../foo.bar`);
fs.readFile(__dirname + '/../../foo.bar');
でそれはうまくいきました。