Jak to napisać, aby wrócić do poziomów nadrzędnych 2 i znaleźć plik?
fs.readFile(__dirname + 'foo.bar');
Jak to napisać, aby wrócić do poziomów nadrzędnych 2 i znaleźć plik?
fs.readFile(__dirname + 'foo.bar');
Odpowiedzi:
Spróbuj tego:
fs.readFile(__dirname + '/../../foo.bar');
Zwróć uwagę na ukośnik na początku względnej ścieżki.
__dirnamebyło coś w stylu '/foo/bar'raczej niż '/foo/bar/'.
__dirnamemoże wyglądać /path/to/your/dir, jeśli powiesz, że __dirname + ".."to /path/to/your/dir.., co jest katalog nie istnieje, zamiast /path/to/your. Cięcie jest ważne.
Użyj 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() poradzi sobie z początkowymi / końcowymi ukośnikami i po prostu zrobi właściwą rzecz i nie musisz próbować pamiętać, kiedy końcowe ukośniki istnieją, a kiedy nie.
path.joinjest poprawny sposób, zaakceptowanej odpowiedź nie powinna być stosowana, to nawet wyzwala eslinton airbnb-base preset, zasada no-path-concat w szczególności
__dirnamebył host/src/foldera ja potrzebowałem host/folderi ten pracował dla mnie, a nie odpowiedź OP.
path.join(__dirname, '..', '..', 'foo.bar')
Wiem, że to trochę wybredne, ale wszystkie dotychczasowe odpowiedzi nie są całkiem poprawne.
Celem path.join () jest wyeliminowanie potrzeby, aby program wywołujący wiedział, którego separatora katalogów należy użyć (co czyni platformę kodu agnostyczną).
Technicznie prawidłowa odpowiedź brzmi:
var path = require("path");
fs.readFile(path.join(__dirname, '..', '..', 'foo.bar'));
Dodałbym to jako komentarz do odpowiedzi Alexa Wayne'a, ale jeszcze za mało przedstawicieli!
EDYCJA: zgodnie z obserwacją użytkownika1767586
Najprostszym sposobem byłoby użycie path.resolve:
path.resolve(__dirname, '..', '..');
../do ścieżki
Wygląda na to, że będziesz potrzebował pathmodułu. ( path.normalizew szczególności)
var path = require("path"),
fs = require("fs");
fs.readFile(path.normalize(__dirname + "/../../foo.bar"));
Jeśli inny moduł dzwoni do Ciebie i nadal chcesz znać lokalizację uruchamianego pliku głównego, możesz użyć modyfikacji kodu @ Jason:
var path = require('path'),
__parentDir = path.dirname(process.mainModule.filename);
fs.readFile(__parentDir + '/foo.bar');
W ten sposób uzyskasz lokalizację uruchamianego skryptu.
Jeśli nie masz pozytywnego zdania na temat tego, gdzie jest rodzic, dostaniesz ścieżkę;
var path = require('path'),
__parentDir = path.dirname(module.parent.filename);
fs.readFile(__parentDir + '/foo.bar');
korzystam z aplikacji elektronowej i mogę pobrać folder nadrzędny za pomocą path.resolve ()
poziom rodzica 1:path.resolve(__dirname, '..') + '/'
rodzic 2 poziomy:path.resolve(__dirname, '..', '..') + '/'
zadziała to również:
fs.readFile(`${__dirname}/../../foo.bar`);
fs.readFile(__dirname + '/../../foo.bar');i zadziałało.