Réponses:
Essaye ça:
fs.readFile(__dirname + '/../../foo.bar');
Notez la barre oblique au début du chemin relatif.
__dirname
c'était '/foo/bar'
quelque chose comme plutôt que '/foo/bar/'
.
__dirname
peut ressembler /path/to/your/dir
, si vous dites __dirname + ".."
qu'il est /path/to/your/dir..
, ce qui est un répertoire inexistant, plutôt que /path/to/your
. La barre oblique est importante.
Utilisez 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()
gérera les barres obliques de début / de fin pour vous et fera ce qu'il faut et vous n'aurez pas à essayer de vous souvenir quand les barres obliques de fin existent et quand elles n'existent pas.
path.join
la manière correcte, la réponse acceptée ne doit pas être suivi, il déclenche même eslint
sur airbnb-base preset
, la règle no-chemin concat en particulier
__dirname
était host/src/folder
et je avais besoin host/folder
et cela a fonctionné pour moi, pas la réponse OP.
path.join(__dirname, '..', '..', 'foo.bar')
Je sais que c'est un peu difficile, mais toutes les réponses jusqu'à présent ne sont pas tout à fait exactes.
Le but de path.join () est d'éliminer le besoin pour l'appelant de savoir quel séparateur de répertoire utiliser (rendant la plate-forme de code indépendante).
Techniquement, la bonne réponse serait quelque chose comme:
var path = require("path");
fs.readFile(path.join(__dirname, '..', '..', 'foo.bar'));
J'aurais ajouté ceci en commentaire à la réponse d'Alex Wayne mais pas encore assez de rep!
EDIT: selon l'observation de user1767586
Le moyen le plus simple serait d'utiliser path.resolve
:
path.resolve(__dirname, '..', '..');
../
le chemin
Il semblerait que vous ayez besoin du path
module. ( path.normalize
en particulier)
var path = require("path"),
fs = require("fs");
fs.readFile(path.normalize(__dirname + "/../../foo.bar"));
Si un autre module appelle le vôtre et que vous souhaitez toujours connaître l'emplacement du fichier principal en cours d'exécution, vous pouvez utiliser une modification du code de @ Jason:
var path = require('path'),
__parentDir = path.dirname(process.mainModule.filename);
fs.readFile(__parentDir + '/foo.bar');
De cette façon, vous obtiendrez l'emplacement du script en cours d'exécution.
Si vous n'êtes pas sûr de l'endroit où se trouve le parent, cela vous donnera le chemin;
var path = require('path'),
__parentDir = path.dirname(module.parent.filename);
fs.readFile(__parentDir + '/foo.bar');
J'exécute l'application electron et je peux obtenir le dossier parent par path.resolve ()
niveau parent 1:path.resolve(__dirname, '..') + '/'
parent 2 niveaux:path.resolve(__dirname, '..', '..') + '/'
cela fonctionnera également:
fs.readFile(`${__dirname}/../../foo.bar`);
fs.readFile(__dirname + '/../../foo.bar');
et cela a fonctionné.