Respostas:
Tente o seguinte:
fs.readFile(__dirname + '/../../foo.bar');
Observe a barra no início do caminho relativo.
__dirnameera algo '/foo/bar'mais do que '/foo/bar/'.
__dirnamepode parecer /path/to/your/dir, se você diz __dirname + ".."que é /path/to/your/dir.., que é um diretório inexistente, e não /path/to/your. A barra é importante.
Use 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() ele lida com barras à esquerda / à direita e faz a coisa certa e você não precisa se lembrar de quando existem barras à direita e quando não existem.
path.joiné a maneira correta, a resposta aceita não deve ser seguido, ele ainda provoca eslintem airbnb-base preset, a regra não-path-concat em particular
__dirnameera host/src/foldere eu precisava host/foldere isso funcionou para mim, não a resposta do OP.
path.join(__dirname, '..', '..', 'foo.bar')
Eu sei que é um pouco exigente, mas todas as respostas até agora não estão certas.
O objetivo de path.join () é eliminar a necessidade de o chamador saber qual separador de diretório usar (tornando a plataforma de código independente).
Tecnicamente, a resposta correta seria algo como:
var path = require("path");
fs.readFile(path.join(__dirname, '..', '..', 'foo.bar'));
Eu teria acrescentado isso como um comentário à resposta de Alex Wayne, mas ainda não o suficiente!
EDIT: conforme observação de user1767586
A maneira mais fácil seria usar path.resolve:
path.resolve(__dirname, '..', '..');
../- se ao caminho
Parece que você precisará do pathmódulo. ( path.normalizeem particular)
var path = require("path"),
fs = require("fs");
fs.readFile(path.normalize(__dirname + "/../../foo.bar"));
Se outro módulo chamar o seu e você ainda quiser saber o local do arquivo principal em execução, use uma modificação do código de @ Jason:
var path = require('path'),
__parentDir = path.dirname(process.mainModule.filename);
fs.readFile(__parentDir + '/foo.bar');
Dessa forma, você obterá a localização do script realmente sendo executado.
Se você não souber onde está o pai ou mãe, isso lhe dará o caminho;
var path = require('path'),
__parentDir = path.dirname(module.parent.filename);
fs.readFile(__parentDir + '/foo.bar');
Estou executando o aplicativo elétron e posso obter a pasta pai por path.resolve ()
nível pai 1:path.resolve(__dirname, '..') + '/'
pai 2 níveis:path.resolve(__dirname, '..', '..') + '/'
isso também funcionará:
fs.readFile(`${__dirname}/../../foo.bar`);
fs.readFile(__dirname + '/../../foo.bar');e funcionou.