Come posso scrivere questo per risalire i 2 livelli principali per trovare un file?fs: come individuare una cartella principale?
fs.readFile(__dirname + 'foo.bar');
Come posso scrivere questo per risalire i 2 livelli principali per trovare un file?fs: come individuare una cartella principale?
fs.readFile(__dirname + 'foo.bar');
Prova questo:
fs.readFile(__dirname + '/../../foo.bar');
Nota la barra all'inizio del percorso relativo.
Sembra che sia necessario il modulo path
. (path.normalize
in particolare)
var path = require("path"),
fs = require("fs");
fs.readFile(path.normalize(__dirname + "/../../foo.bar"));
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à leader/finali barre per voi e solo fare la cosa giusta e non si deve cercare di ricordare quando esistono barre finali e quando non lo fanno.
questa risposta con 'path.join' è il modo corretto, la risposta accettata non deve essere seguita, si attiva anche' eslint' su 'airbnb-base preset', la regola [no-path-concat] (https: // eslint.org/docs/rules/no-path-concat) in particolare – revelt
100a upvote.Il mio '__dirname' era' host/src/folder' e avevo bisogno di 'host/folder' e questo ha funzionato per me, non la risposta OP. – carkod
Se non sei positivo su dove si trova il genitore, questo ti porterà sul percorso;
var path = require('path'),
__parentDir = path.dirname(module.parent.filename);
fs.readFile(__parentDir + '/foo.bar');
Se un altro modulo chiama il vostro e che ci si piace ancora di conoscere la posizione del file principale in esecuzione è possibile utilizzare una modifica del Codice di Jason @:
var path = require('path'),
__parentDir = path.dirname(process.mainModule.filename);
fs.readFile(__parentDir + '/foo.bar');
In questo modo sarete ottenere la posizione dello script effettivamente in esecuzione.
So che è un po 'schizzinoso, ma tutte le risposte finora non sono corrette.
Il punto di path.join() è di eliminare la necessità per il chiamante di sapere quale separatore di directory utilizzare (rendendo agnostico la piattaforma del codice).
Tecnicamente la risposta corretta sarebbe qualcosa di simile:
var path = require("path");
fs.readFile(path.join(__dirname, '..', '..', 'foo.bar'));
avrei aggiunto questo come un commento alla risposta di Alex Wayne, ma non abbastanza rep ancora!
EDIT: come per l'osservazione di user1767586
"foo.bar" dovrebbe essere "foo.bar". Ho provato a fare una modifica, ma le modifiche devono essere di almeno 6 caratteri (regola stupida se me lo chiedi, ci impedisce di modificare piccoli refusi come questo) – user1767586
È possibile utilizzare
path.join(__dirname, '../..');
Il modo più semplice sarebbe quella di utilizzare path.resolve
:
path.resolve(__dirname, '..', '..');
effettivamente il corretto soluzione in quanto non è necessario risolvere la cartella unendo '../' al percorso –
avevo cercato che senza fortuna, ma ho solo ha fatto 'fs.readFile (__ dirname + '/../../ foo.bar');' e ha funzionato. – fancy
Suppongo quindi che '__dirname' somigli a' '/ foo/bar'' piuttosto che a'/foo/bar/''. –
suppongo di sì ... – fancy