Risposte:
Prova questo:
fs.readFile(__dirname + '/../../foo.bar');
Nota la barra in avanti all'inizio del percorso relativo.
__dirname
fosse qualcosa di simile '/foo/bar'
piuttosto che di '/foo/bar/'
.
__dirname
può sembrare /path/to/your/dir
, se si dice __dirname + ".."
che è /path/to/your/dir..
, che è una directory inesistente, piuttosto che /path/to/your
. La barra è importante.
Usa 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()
gestirà le barre iniziali / finali per te e farà semplicemente la cosa giusta e non dovrai cercare di ricordare quando esistono barre finali e quando non lo fanno.
path.join
è il modo corretto, la risposta accettata non dovrebbe essere seguita, si innesca anche eslint
su airbnb-base preset
, la regola di non-path-concat in particolare
__dirname
era host/src/folder
e avevo bisogno host/folder
e questo ha funzionato per me, non è la risposta OP.
path.join(__dirname, '..', '..', 'foo.bar')
So che è un po 'esigente, ma tutte le risposte finora non sono del tutto giuste.
Il punto di path.join () è eliminare la necessità per il chiamante di sapere quale separatore di directory utilizzare (rendendo agnostica la piattaforma di codice).
Tecnicamente la risposta corretta sarebbe qualcosa del tipo:
var path = require("path");
fs.readFile(path.join(__dirname, '..', '..', 'foo.bar'));
Lo avrei aggiunto come commento alla risposta di Alex Wayne ma non ancora abbastanza rappresentante!
EDIT: come da osservazione dell'utente1767586
Il modo più semplice sarebbe usare path.resolve
:
path.resolve(__dirname, '..', '..');
../
al percorso
Sembra che avrai bisogno del path
modulo. ( path.normalize
in particolare)
var path = require("path"),
fs = require("fs");
fs.readFile(path.normalize(__dirname + "/../../foo.bar"));
Se un altro modulo chiama il tuo e desideri comunque conoscere la posizione del file principale in esecuzione, puoi utilizzare una modifica del codice @ Jason:
var path = require('path'),
__parentDir = path.dirname(process.mainModule.filename);
fs.readFile(__parentDir + '/foo.bar');
In questo modo otterrai la posizione dello script effettivamente in esecuzione.
Se non sei sicuro di dove sia il genitore, questo ti porterà sul percorso;
var path = require('path'),
__parentDir = path.dirname(module.parent.filename);
fs.readFile(__parentDir + '/foo.bar');
sto eseguendo l'app di elettroni e posso ottenere la cartella principale da path.resolve ()
livello padre 1:path.resolve(__dirname, '..') + '/'
livelli padre 2:path.resolve(__dirname, '..', '..') + '/'
questo funzionerà anche:
fs.readFile(`${__dirname}/../../foo.bar`);
fs.readFile(__dirname + '/../../foo.bar');
e ha funzionato.