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.
__dirname
było coś w stylu '/foo/bar'
raczej niż '/foo/bar/'
.
__dirname
moż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.join
jest poprawny sposób, zaakceptowanej odpowiedź nie powinna być stosowana, to nawet wyzwala eslint
on airbnb-base preset
, zasada no-path-concat w szczególności
__dirname
był host/src/folder
a ja potrzebowałem host/folder
i 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ł path
modułu. ( path.normalize
w 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.