Deskripsi metode:
Versi sinkron dari fs.realpath ().
tata bahasa:
Salinan kode adalah sebagai berikut:
fs.realpathsync (path, [cache])
Karena metode ini milik modul FS, perlu untuk memperkenalkan modul FS sebelum digunakan (var fs = membutuhkan ("fs"))
Menerima parameter:
jalur jalur
Cache Opsional, jalur yang dipetakan secara literal dapat digunakan untuk memaksa jalur tertentu untuk menyelesaikan atau menghindari fs.stat tambahan perlu mengetahui objek jalur yang sebenarnya.
contoh:
Salinan kode adalah sebagai berikut:
var fs = membutuhkan ('fs');
// titik menunjukkan jalur file saat ini
var str = fs.realpathsync ('.');
Console.log (str);
Kode Sumber:
Salinan kode adalah sebagai berikut:
fs.realpathsync = fungsi realpathsync (p, cache) {
// Buat P adalah mutlak
p = pathmodule.resolve (p);
if (cache && object.prototype.hasownproperty.call (cache, p)) {
mengembalikan cache [p];
}
var asli = p,
seelinks = {},
knowhard = {};
// posisi karakter saat ini di p
var pos;
// jalur parsial sejauh ini, termasuk tebasan trailing jika ada
arus var;
// jalur parsial tanpa tebasan trailing (kecuali saat menunjuk pada root)
basis var;
// jalur parsial yang dipindai di babak sebelumnya, dengan slash
var sebelumnya;
awal();
fungsi start () {
// lewati akar
var m = splitrootre.exec (p);
pos = m [0] .length;
saat ini = m [0];
basis = m [0];
Sebelumnya = '';
// Di Windows, periksa apakah root ada. Di UNIX tidak perlu.
if (isWindows &&! knowhard [base]) {
fs.lstatsync (basis);
Dikenalhard [base] = true;
}
}
// Berjalanlah menyusuri jalan setapak, bertukar jalan yang tertaut untuk mereka yang sebenarnya
// nilai
// NB: P. Panjang Perubahan.
while (pos <p.length) {
// Temukan bagian selanjutnya
nextPartre.LastIndex = pos;
var result = nextPartre.exec (p);
Sebelumnya = saat ini;
saat ini += hasil [0];
basis = hasil sebelumnya + [1];
pos = nextPartre.LastIndex;
// lanjutkan jika bukan symlink
if (dikenal [base] || (cache && cache [base] === base)) {
melanjutkan;
}
var resolvedlink;
if (cache && object.prototype.hasownproperty.call (cache, base)) {
// Beberapa tautan simbolik yang diketahui. Tidak perlu statistik lagi.
resolvedlink = cache [base];
} kalau tidak {
var stat = fs.lstatsync (basis);
if (! stat.issymboliclink ()) {
Dikenalhard [base] = true;
if (cache) cache [base] = base;
melanjutkan;
}
// Baca tautannya jika belum dibaca sebelumnya
// dev/ino selalu mengembalikan 0 pada windows, jadi lewati cek.
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)) {
fs.statsync (basis);
linkTarget = fs.readlinksync (base);
}
resolvedlink = pathmodule.resolve (sebelumnya, linkTarget);
// Lacak ini, jika diberi cache.
if (cache) cache [base] = resolvedLink;
if (! isWindows) seelinks [id] = linkTarget;
}
// menyelesaikan tautan, lalu mulai dari awal
p = pathmodule.resolve (ResolvedLink, p.slice (pos));
awal();
}
if (cache) cache [asli] = p;
mengembalikan P;
};