وصف الطريقة:
نسخة متزامنة من fs.realpath ().
القواعد:
نسخة الكود كما يلي:
fs.realpathsync (المسار ، [ذاكرة التخزين المؤقت])
نظرًا لأن هذه الطريقة تنتمي إلى وحدة FS ، فمن الضروري تقديم وحدة FS قبل الاستخدام (var fs = require ("fs"))
تلقي المعلمات:
مسار المسار
ذاكرة التخزين المؤقت اختياريًا ، يمكن استخدام مسار معين محدد لإجبار مسار معين لحل أو تجنب Fs.Stat الإضافية إلى معرفة كائن المسار الحقيقي.
مثال:
نسخة الكود كما يلي:
var fs = require ('fs') ؛
// تشير النقطة إلى مسار الملف الحالي
var str = fs.realpathsync ('.') ؛
console.log (str) ؛
رمز المصدر:
نسخة الكود كما يلي:
fs.realpathsync = function RealPathsync (p ، cache) {
// جعل P مطلقة
p = pathmodule.Resolve (p) ؛
if (cache && object.prototype.hasownproperty.call (cache ، p)) {
إرجاع ذاكرة التخزين المؤقت [p] ؛
}
var Original = p ،
seelinks = {} ،
المعروف = {} ؛
// موقف الحرف الحالي في P
var pos ؛
// المسار الجزئي حتى الآن ، بما في ذلك القطع المدمجة إن وجدت
var الحالي ؛
// المسار الجزئي بدون مائلة زائدة (إلا عند الإشارة إلى جذر)
قاعدة فار.
// المسار الجزئي الممسوحة ضوئيًا في الجولة السابقة ، مع القطع المائلة
var السابق ؛
يبدأ()؛
وظيفة start () {
// تخطي الجذور
var m = splitrootre.exec (p) ؛
pos = m [0]. الطول ؛
الحالي = م [0] ؛
قاعدة = م [0] ؛
السابق = '' ؛
// على Windows ، تحقق من وجود الجذر. في يونيكس ليست هناك حاجة.
if (isWindows &&! المعروفة [قاعدة]) {
fs.lstatsync (قاعدة) ؛
المعروف [قاعدة] = صواب ؛
}
}
5
// قيم
// NB: تغييرات P.Length.
بينما (pos <p.length) {
// ابحث عن الجزء التالي
nextPartre.lastIndex = pos ؛
var result = nextPartre.exec (p) ؛
السابق = الحالي ؛
الحالي += النتيجة [0] ؛
قاعدة = سابقة + نتيجة [1] ؛
pos = nextpartre.lastindex ؛
// تابع إن لم يكن symlink
if (المعروف [base] || (ذاكرة التخزين المؤقت && cache [base] === base)) {
يكمل؛
}
var ResolvedLink.
if (cache && object.prototype.hasownproperty.call (ذاكرة التخزين المؤقت ، قاعدة)) {
// بعض الرابط الرمزي المعروف. لا حاجة للإحصاء مرة أخرى.
ResolvedLink = ذاكرة التخزين المؤقت [قاعدة] ؛
} آخر {
var stat = fs.lstatsync (base) ؛
if (! stat.issymboliclink ()) {
المعروف [قاعدة] = صواب ؛
إذا (ذاكرة التخزين المؤقت) ذاكرة التخزين المؤقت [قاعدة] = قاعدة ؛
يكمل؛
}
// اقرأ الرابط إذا لم يتم قراءته من قبل
// dev/ino ارجع دائمًا 0 على Windows ، لذا تخطي الشيك.
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 (قاعدة) ؛
LinkTarget = fs.readlinksync (قاعدة) ؛
}
ResolvedLink = pathmodule.resolve (سابق ، LinkTarget) ؛
// تتبع هذا ، إذا أعطيت ذاكرة التخزين المؤقت.
إذا (ذاكرة التخزين المؤقت) ذاكرة التخزين المؤقت [base] = resolvedLink ؛
if (! isWindows) seelinks [id] = linkTarget ؛
}
// حل الرابط ، ثم ابدأ من جديد
p = pathmodule.resolve (resolvedLink ، p.slice (pos)) ؛
يبدأ()؛
}
إذا (ذاكرة التخزين المؤقت) ذاكرة التخزين المؤقت [الأصلي] = p ؛
العودة P ؛
} ؛