Antworten:
Versuche dies:
fs.readFile(__dirname + '/../../foo.bar');
Beachten Sie den Schrägstrich am Anfang des relativen Pfads.
__dirname
gehe dann davon aus, dass das '/foo/bar'
eher so war als '/foo/bar/'
.
__dirname
aussehen kann /path/to/your/dir
, wenn Sie sagen , __dirname + ".."
es ist /path/to/your/dir..
, was ein nicht vorhandenes Verzeichnis ist, statt /path/to/your
. Der Schrägstrich ist wichtig.
Verwenden Sie 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()
übernimmt führende / nachfolgende Schrägstriche für Sie und tut einfach das Richtige, und Sie müssen sich nicht daran erinnern, wann nachfolgende Schrägstriche vorhanden sind und wann nicht.
path.join
ist der richtige Weg, die akzeptierte Antwort sollte nicht gefolgt werden, es selbst löst eslint
auf airbnb-base preset
, die Regel nicht-Weg-concat insbesondere
__dirname
war host/src/folder
und ich brauchte host/folder
und das funktionierte für mich, nicht die OP-Antwort.
path.join(__dirname, '..', '..', 'foo.bar')
Ich weiß, dass es ein bisschen wählerisch ist, aber alle Antworten sind bisher nicht ganz richtig.
Der Punkt von path.join () besteht darin, dass der Aufrufer nicht mehr wissen muss, welches Verzeichnistrennzeichen verwendet werden soll (wodurch die Codeplattform agnostisch wird).
Technisch gesehen wäre die richtige Antwort so etwas wie:
var path = require("path");
fs.readFile(path.join(__dirname, '..', '..', 'foo.bar'));
Ich hätte dies als Kommentar zu Alex Waynes Antwort hinzugefügt, aber noch nicht genug Wiederholungen!
BEARBEITEN: gemäß der Beobachtung von user1767586
Der einfachste Weg wäre zu verwenden path.resolve
:
path.resolve(__dirname, '..', '..');
../
dem Pfad anschließen
Sieht so aus, als ob Sie das path
Modul benötigen . ( path.normalize
insbesondere)
var path = require("path"),
fs = require("fs");
fs.readFile(path.normalize(__dirname + "/../../foo.bar"));
Wenn ein anderes Modul Ihr Modul aufruft und Sie dennoch den Speicherort der ausgeführten Hauptdatei wissen möchten, können Sie eine Änderung des Codes von @ Jason verwenden:
var path = require('path'),
__parentDir = path.dirname(process.mainModule.filename);
fs.readFile(__parentDir + '/foo.bar');
Auf diese Weise erhalten Sie den Speicherort des Skripts, das tatsächlich ausgeführt wird.
Wenn Sie nicht sicher sind, wo sich die Eltern befinden, erhalten Sie den richtigen Weg.
var path = require('path'),
__parentDir = path.dirname(module.parent.filename);
fs.readFile(__parentDir + '/foo.bar');
Ich verwende eine Elektronen-App und kann den übergeordneten Ordner über path.resolve () abrufen.
Elternteil 1 Stufe:path.resolve(__dirname, '..') + '/'
Eltern 2 Ebenen:path.resolve(__dirname, '..', '..') + '/'
das wird auch funktionieren:
fs.readFile(`${__dirname}/../../foo.bar`);
fs.readFile(__dirname + '/../../foo.bar');
es einfach und es funktionierte.