Comment puis-je écrire cela pour remonter les 2 niveaux parent afin de trouver un fichier?
fs.readFile(__dirname + 'foo.bar');
Essaye ça:
fs.readFile(__dirname + '/../../foo.bar');
Notez la barre oblique au début du chemin relatif.
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 pour vous les barres obliques de début/de fin, mais vous n'avez rien à faire. Vous n'avez pas besoin d'essayer de vous rappeler quand les barres obliques existent ou non.
Je sais que c'est un peu difficile, mais toutes les réponses jusqu'à présent ne sont pas tout à fait correctes.
Path.join () a pour objectif d'éviter à l'appelant de savoir quel séparateur de répertoires utiliser (rendre le code indépendant de la plate-forme).
Techniquement, la bonne réponse serait quelque chose comme:
var path = require("path");
fs.readFile(path.join(__dirname, '..', '..', 'foo.bar'));
J'aurais ajouté ceci comme commentaire à la réponse d'Alex Wayne mais pas assez de représentant pour le moment!
EDIT: selon l'observation de l'utilisateur1767586
Le moyen le plus simple serait d’utiliser path.resolve
:
_path.resolve(__dirname, '..', '..');
_
On dirait que vous aurez besoin du module path
. ( 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 certain de l'endroit où se trouve le parent, vous obtiendrez le chemin.
var path = require('path'),
__parentDir = path.dirname(module.parent.filename);
fs.readFile(__parentDir + '/foo.bar');
Vous pouvez utiliser
path.join(__dirname, '../..');
cela fonctionnera aussi:
fs.readFile(`${__dirname}/../../foo.bar`);