Description de la méthode:
Version synchrone de fs.realpath ().
grammaire:
La copie de code est la suivante:
Fs.realPathSync (Path, [Cache])
Étant donné que cette méthode appartient au module FS, il est nécessaire d'introduire le module FS avant utilisation (var fs = require ("fs")))
Recevoir des paramètres:
chemin de chemin
Cache éventuellement, un chemin cartographié littéral peut être utilisé pour forcer un chemin spécifique pour résoudre ou éviter que Fsat supplémentaire doit connaître l'objet de chemin réel.
exemple:
La copie de code est la suivante:
var fs = require ('fs');
// Le point indique le chemin du fichier actuel
var str = fs.realPathSync ('.');
Console.log (STR);
Code source:
La copie de code est la suivante:
fs.realPathSync = fonction realPathSync (p, cache) {
// rendre p est absolu
p = pathmodule.resolve (p);
if (cache && object.prototype.hasownproperty.call (cache, p)) {
retour cache [p];
}
var original = p,
Seelinks = {},
connuhard = {};
// position de caractère actuel dans P
var pos;
// le chemin partiel jusqu'à présent, y compris une barre oblique de fuite, le cas échéant
courant var;
// Le chemin partiel sans obstacle de fuite (sauf lorsque vous pointez une racine)
Var Base;
// Le chemin partiel scanné lors du tour précédent, avec une barre oblique
var précédent;
commencer();
fonction start () {
// saute les racines
var m = splitrootre.exec (p);
pos = m [0] .length;
courant = m [0];
base = m [0];
précédent = '';
// Sur Windows, vérifiez que la racine existe. Sur Unix, il n'y a pas besoin.
if (isWindows &&! Knowhard [base]) {
fs.lstatSync (base);
connuhard [base] = true;
}
}
// marche sur le chemin, en échangeant des pathparts liés contre leur vrai
// valeurs
// NB: P.Length Changements.
while (pos <p.length) {
// Trouvez la partie suivante
NextPartre.LastIndex = pos;
var result = nextpartre.exec (p);
Précédent = courant;
courant + = résultat [0];
base = Résultat précédent + [1];
pos = nextPartre.LastIndex;
// Continuez sinon un lien symbolique
if (connuhard [base] || (cache && cache [base] === base)) {
continuer;
}
var résolvelink;
if (cache && object.prototype.hasownproperty.call (cache, base)) {
// un lien symbolique connu. Pas besoin de statistique à nouveau.
résolvedLink = cache [base];
} autre {
var stat = fs.lstatSync (base);
if (! stat.issymboliclink ()) {
connuhard [base] = true;
if (cache) cache [base] = base;
continuer;
}
// Lisez le lien s'il n'était pas lu avant
// Dev / INO renvoie toujours 0 sous Windows, alors sautez le chèque.
var linktarget = null;
if (! Iswindows) {
var id = stat.dev.tostring (32) + ':' + stat.ino.tostring (32);
if (SeenLinks.hasownproperty (id)) {
linktarget = SeenLinks [id];
}
}
if (util.isnull (linktarget)) {
fsatSync (base);
linktarget = fs.readLinkSync (base);
}
résolvedLink = pathModule.Resolve (précédent, linktarget);
// Suivez ceci, si vous donnez un cache.
if (cache) cache [base] = résolvedLink;
if (! isWindows) Seelinks [id] = linktarget;
}
// résoudre le lien, puis recommencer
p = pathmodule.resolve (résolvelink, p.slice (pos));
commencer();
}
if (cache) cache [original] = p;
Retour p;
};