Как мне написать это, чтобы вернуться на два родительских уровня в поисках файла?
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');и это сработало.