Methode Beschreibung:
Synchronversion von FS. RealPath ().
Grammatik:
Die Codekopie lautet wie folgt:
FS. Realpathsync (Pfad, [Cache])
Da diese Methode zum FS -Modul gehört, muss das FS -Modul vor der Verwendung eingeführt werden (var fs = require ("fs"))
Parameter empfangen:
Pfad
Cache Optional kann ein buchstäblicher Pfad verwendet werden, um einen bestimmten Pfad zu erzwingen, um zusätzliche Fs.Stat zu lösen oder zu vermeiden, dass das reale Pfadobjekt kennen.
Beispiel:
Die Codekopie lautet wie folgt:
var fs = fordert ('fs');
// Der Punkt zeigt den Pfad der aktuellen Datei an
var str = fs.realpathsync ('.');
console.log (str);
Quellcode:
Die Codekopie lautet wie folgt:
fs.realpathsync = function Realpathsync (p, cache) {
// p ist absolut
p = pathmodule.resolve (p);
if (cache && object.prototype.hasownProperty.call (cache, p)) {
Cache zurückgeben [p];
}
var original = p,
seelinks = {},
bekanntHard = {};
// aktuelle Zeichenposition in p
var pos;
// der teilweise Pfad bisher, einschließlich eines nachverfolgenden Schrägs, falls vorhanden
var Strom;
// der Teilweg ohne nachfolgende Schrägstrich (außer wenn auf eine Wurzel zeigt)
var Basis;
// Der teilweise Pfad, der in der vorherigen Runde mit Schrägstrich gescannt wurde
var vorher;
Start();
Funktion start () {
// Wurzeln überspringen
var m = splitrootre.exec (p);
pos = m [0] .Length;
Strom = m [0];
Basis = m [0];
vorher = '';
// Unter Windows überprüfen Sie, ob das Root existiert. Auf Unix gibt es keine Notwendigkeit.
if (isWindows &&! Bekannte Hard [Basis]) {
fs.lstatync (Basis);
bekannthard [Basis] = wahr;
}
}
// Gehen Sie den Pfad hinunter und tauschen Sie verknüpfte Pfade gegen ihre Realität aus
// Werte
// NB: P.Length Änderungen.
while (pos <p.Length) {
// den nächsten Teil finde
NextParre.LastIndex = pos;
var result = nextPartre.exec (p);
vorher = Strom;
Strom += Ergebnis [0];
Basis = vorheriges + Ergebnis [1];
pos = NextParre.lastIndex;
// Fahren Sie weiter, wenn nicht ein Symlink
if (bekannthard [Base] || (Cache && Cache [Basis] === Basis)) {
weitermachen;
}
var respedlink;
if (cache && object.prototype.hasownProperty.call (cache, base)) {
// einige bekannte symbolische Verbindung. Keine Notwendigkeit, wieder zu stat.
Auflösungslink = Cache [Basis];
} anders {
var stat = fs.lstatSync (Basis);
if (! stat.issymbolicLink ()) {
bekannthard [Basis] = wahr;
if (cache) cache [base] = base;
weitermachen;
}
// Lesen Sie den Link, wenn er vorher nicht gelesen wurde
// Dev/Ino gibt immer 0 unter Windows zurück, also überspringen Sie die Überprüfung.
var linkTarget = null;
if (! isWindows) {
var id = stat.dev.toString (32) + ':' + stat.ino.toString (32);
if (SeaDlinks.hasownProperty (id)) {
linkTarget = seeeplinks [id];
}
}
if (util.isnull (linkTarget)) {
fs.StatSync (Basis);
linkTarget = fs.readlinkSync (Basis);
}
coledLink = pathmodule.resolve (vorher, linkTarget);
// Verfolgen Sie dies, wenn Sie einen Cache gegeben haben.
if (cache) cache [Basis] = Auflösungen;
if (! isWindows) seelinks [id] = linkTarget;
}
// den Link auflösen und dann von vorne beginnen
p = pathmodule.resolve (Auflösungen, p.slice (pos));
Start();
}
if (cache) cache [original] = p;
Rückkehr p;
};