Respuestas:
Prueba esto:
fs.readFile(__dirname + '/../../foo.bar');
Tenga en cuenta la barra diagonal al comienzo de la ruta relativa.
__dirname
fue algo así como '/foo/bar'
no '/foo/bar/'
.
__dirname
puede parecer /path/to/your/dir
, si usted dice __dirname + ".."
que es /path/to/your/dir..
, que es un directorio que no existe, en lugar de /path/to/your
. El corte es importante.
Utilice 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()
manejará las barras diagonales / finales por usted y simplemente hará lo correcto y no tendrá que intentar recordar cuándo existen las barras diagonales finales y cuándo no.
path.join
es la forma correcta, la respuesta aceptada no debe ser seguido, incluso desencadena eslint
en airbnb-base preset
la regla de no-path-concat en particular
__dirname
era host/src/folder
y necesitaba host/folder
y esto funcionó para mí, no la respuesta OP.
path.join(__dirname, '..', '..', 'foo.bar')
Sé que es un poco exigente, pero todas las respuestas hasta ahora no son correctas.
El punto de path.join () es eliminar la necesidad de que la persona que llama sepa qué separador de directorio usar (haciendo que la plataforma de código sea independiente).
Técnicamente, la respuesta correcta sería algo como:
var path = require("path");
fs.readFile(path.join(__dirname, '..', '..', 'foo.bar'));
¡Hubiera agregado esto como un comentario a la respuesta de Alex Wayne, pero todavía no tengo suficiente representante!
EDITAR: según la observación del usuario 1767586
La forma más fácil sería usar path.resolve
:
path.resolve(__dirname, '..', '..');
../
a la ruta
Parece que necesitarás el path
módulo. ( path.normalize
en particular)
var path = require("path"),
fs = require("fs");
fs.readFile(path.normalize(__dirname + "/../../foo.bar"));
Si otro módulo llama al suyo y aún desea saber la ubicación del archivo principal que se está ejecutando, puede usar una modificación del código de @ Jason:
var path = require('path'),
__parentDir = path.dirname(process.mainModule.filename);
fs.readFile(__parentDir + '/foo.bar');
De esa forma obtendrá la ubicación del script que se está ejecutando realmente.
Si no está seguro de dónde está el padre, esto le dará el camino;
var path = require('path'),
__parentDir = path.dirname(module.parent.filename);
fs.readFile(__parentDir + '/foo.bar');
Estoy ejecutando la aplicación de electrones y puedo obtener la carpeta principal por path.resolve ()
Nivel padre 1:path.resolve(__dirname, '..') + '/'
padres 2 niveles:path.resolve(__dirname, '..', '..') + '/'
esto también funcionará:
fs.readFile(`${__dirname}/../../foo.bar`);
fs.readFile(__dirname + '/../../foo.bar');
y funcionó.