Penerangan kaedah:
Versi disegerakkan fs.realpath() .
Tatabahasa:
fs.realpathSync(laluan, [cache])
Memandangkan kaedah ini tergolong dalam modul fs, modul fs perlu diperkenalkan sebelum digunakan (var fs= require(“fs”) )
Terima parameter:
Laluan laluan
cache ’ ‐ ‐ ‐ ‐ ‐ ‐ ‐ ‐ ‐ Secara pilihan, laluan yang dipetakan secara literal boleh digunakan untuk memaksa laluan tertentu diselesaikan atau untuk mengelakkan keperluan untuk mengetahui laluan fs.stat tambahan.
Contoh:
var fs = memerlukan('fs');
// Titik menunjukkan laluan fail semasa
var str = fs.realpathSync('.');
console.log(str);
Kod sumber:
fs.realpathSync = fungsi realpathSync(p, cache) {
// jadikan p adalah mutlak
p = pathModule.resolve(p);
if (cache && Object.prototype.hasOwnProperty.call(cache, p)) {
kembalikan cache[p];
}
var asal = p,
seenLinks = {},
dikenali Keras = {};
// kedudukan aksara semasa dalam p
var pos;
// laluan separa setakat ini, termasuk garis miring mengekor jika ada
var semasa;
// laluan separa tanpa garis miring mengekor (kecuali apabila menunjuk pada akar)
asas var;
// laluan separa yang diimbas dalam pusingan sebelumnya, dengan garis miring
var sebelumnya;
mula ();
fungsi mula() {
// Langkau ke atas akar
var m = splitRootRe.exec(p);
pos = m[0].panjang;
semasa = m[0];
asas = m[0];
sebelumnya = '';
// Pada tingkap, semak sama ada akarnya wujud. Pada unix tidak perlu.
if (isWindows && !knownHard[base]) {
fs.lstatSync(asas);
dikenaliKeras[asas] = benar;
}
}
// berjalan di laluan itu, menukar bahagian laluan yang dipautkan dengan
sebenar mereka
// nilai
// NB: p.panjang berubah.
manakala (pos < p.panjang) {
// cari bahagian seterusnya
nextPartRe.lastIndex = pos;
var result = nextPartRe.exec(p);
sebelumnya = semasa;
semasa = hasil[0];
asas = hasil sebelumnya[1];
pos = nextPartRe.lastIndex;
// teruskan jika bukan symlink
if (knownHard[base] || (cache && cache[base] === base)) {
teruskan;
}
var resolvedLink;
if (cache && Object.prototype.hasOwnProperty.call(cache, base)) {
// beberapa pautan simbolik yang diketahui. tak perlu stat lagi.
resolvedLink = cache[base];
} lain {
var stat = fs.lstatSync(base);
jika (!stat.isSymbolicLink()) {
dikenaliKeras[asas] = benar;
jika (cache) cache[base] = base;
teruskan;
}
// baca pautan jika ia tidak dibaca sebelum ini
// dev/ino sentiasa mengembalikan 0 pada tingkap, jadi langkau semak itu.
var linkTarget = null;
jika (!isWindows) {
var id = stat.dev.toString(32) ':' stat.ino.toString(32);
jika (seenLinks.hasOwnProperty(id)) {
linkTarget = seenLinks[id];
}
}
if (util.isNull(linkTarget)) {
fs.statSync(asas);
linkTarget = fs.readlinkSync(base);
}
resolvedLink = pathModule.resolve(sebelumnya, linkTarget);
// jejak ini, jika diberi cache.
jika (cache) cache[base] = solvedLink;
jika (!isWindows) dilihatPautan[id] = linkTarget;
}
// selesaikan pautan, kemudian mulakan semula
p = pathModule.resolve(resolvedLink, p.slice(pos));
mula ();
}
jika (cache) cache[asal] = p;
pulangkan p;
};