Как мне написать это, чтобы вернуться на два родительских уровня в поисках файла?
fs.readFile(__dirname + 'foo.bar');
Ответы:
Попробуй это:
fs.readFile(__dirname + '/../../foo.bar');
Обратите внимание на косую черту в начале относительного пути.
__dirname
было что-то вроде '/foo/bar'
того '/foo/bar/'
.
__dirname
может выглядеть /path/to/your/dir
, если вы говорите , __dirname + ".."
что это /path/to/your/dir..
, что это несуществующая директория, а не /path/to/your
. Косая черта важна.
Используйте 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()
будет обрабатывать начальные / конечные косые черты за вас и просто делать правильные вещи, и вам не нужно пытаться запоминать, когда конечные косые черты существуют, а когда нет.
path.join
правильным путем, принятый ответ не последуют, она даже вызывает eslint
на airbnb-base preset
, правило не траектория-CONCAT в частности
__dirname
был host/src/folder
и мне нужен, host/folder
и это сработало для меня, а не ответ OP.
path.join(__dirname, '..', '..', 'foo.bar')
Я знаю, что это немного придирчиво, но пока все ответы не совсем правильные.
Задача path.join () состоит в том, чтобы избавить вызывающего абонента от необходимости знать, какой разделитель каталогов использовать (делая код независимым от платформы).
Технически правильный ответ будет примерно таким:
var path = require("path");
fs.readFile(path.join(__dirname, '..', '..', 'foo.bar'));
Я бы добавил это как комментарий к ответу Алекса Уэйна, но пока недостаточно репутации!
РЕДАКТИРОВАТЬ: согласно наблюдению пользователя 1767586
Самый простой способ - использовать path.resolve
:
path.resolve(__dirname, '..', '..');
../
к пути
Похоже, вам понадобится path
модуль. ( path.normalize
в частности)
var path = require("path"),
fs = require("fs");
fs.readFile(path.normalize(__dirname + "/../../foo.bar"));
Если другой модуль вызывает ваш, и вы все равно хотите знать, где находится главный запускаемый файл, вы можете использовать модификацию кода @Jason:
var path = require('path'),
__parentDir = path.dirname(process.mainModule.filename);
fs.readFile(__parentDir + '/foo.bar');
Таким образом вы узнаете, где именно запускается скрипт.
Если вы не уверены в том, где находится родитель, это укажет вам путь;
var path = require('path'),
__parentDir = path.dirname(module.parent.filename);
fs.readFile(__parentDir + '/foo.bar');
Я запускаю электронное приложение, и я могу получить родительскую папку по path.resolve ()
родитель 1 уровень:path.resolve(__dirname, '..') + '/'
родительский 2 уровня:path.resolve(__dirname, '..', '..') + '/'
это также будет работать:
fs.readFile(`${__dirname}/../../foo.bar`);
Это отлично работает
path.join(__dirname + '/../client/index.html')
const path = require('path')
const fs = require('fs')
fs.readFile(path.join(__dirname + '/../client/index.html'))
fs.readFile(__dirname + '/../../foo.bar');
и это сработало.