방법 설명 :
fs.RealPath ()의 동기 버전.
문법:
코드 사본은 다음과 같습니다.
fs.realpathsync (path, [캐시])
이 방법은 FS 모듈에 속하므로 사용하기 전에 FS 모듈을 소개해야합니다 (var fs = require ( "fs")).
매개 변수 수신 :
경로 경로
캐시 선택적으로, 문자 그대로 맵핑 된 경로는 특정 경로를 강제로 사용하여 추가 fs.STAT가 실제 경로 객체를 알아야합니다.
예:
코드 사본은 다음과 같습니다.
var fs = 요구 ( '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 current;
// 후행 슬래시가없는 부분 경로 (루트를 가리키는 경우 제외)
var베이스;
// 이전 라운드에서 스캔 한 부분 경로는 슬래시로
var 이전;
시작();
함수 start () {
// 뿌리를 건너 뜁니다
var m = splitrootre.exec (p);
pos = m [0] .length;
전류 = m [0];
base = m [0];
이전 = '';
// Windows에서 루트가 존재하는지 확인하십시오. 유닉스에는 필요하지 않습니다.
if (iswindows &&! 알려진 하드 [base]) {
fs.lstatsync (베이스);
알려진 하드 [base] = true;
}
}
// 길을 따라 걸어 가면서 링크 된 PathParts를 실제로 바꾸어
// 값
// nb : p.length 변경.
while (pos <p.length) {
// 다음 부분을 찾으십시오
NextPartre.lastIndex = pos;
var result = nextpartre.exec (p);
이전 = 현재;
current += 결과 [0];
base = 이전 + 결과 [1];
pos = nextpartre.lastindex;
// Symlink가 아닌 경우 계속하십시오
if (알려진 Hard [base] || (캐시 && 캐시 [base] === base)) {
계속하다;
}
var resolvedLink;
if (cache && object.prototype.hasownproperty.call (cache, base)) {
// 알려진 상징적 링크. 다시 통계 할 필요가 없습니다.
ResolvedLink = 캐시 [베이스];
} 또 다른 {
var stat = fs.lstatsync (base);
if (! stat.issymboliclink ()) {
알려진 하드 [base] = true;
if (캐시) 캐시 [base] = base;
계속하다;
}
// 이전에 읽지 않은 경우 링크를 읽습니다
// dev/ino는 항상 Windows에서 0을 반환하므로 수표를 건너 뜁니다.
var linktarget = null;
if (! iswindows) {
var id = stat.dev.tostring (32) + ':' + stat.ino.tostring (32);
if (seenlinks.hasownProperty (id)) {
linkTarget = seeplinks [id];
}
}
if (util.isnull (linktarget)) {
fs.Statsync (베이스);
linkTarget = fs.ReadLinkSync (base);
}
resolvedLink = pathModule.Resolve (이전, LinkTarget);
// 캐시가 주어지면 이것을 추적합니다.
if (캐시) 캐시 [base] = resolvedLink;
if (! iswindows) seelinks [id] = linktarget;
}
// 링크를 해결 한 다음 다시 시작하십시오
p = pathModule.Resolve (ResolvedLink, P.Slice (POS));
시작();
}
if (캐시) 캐시 [Original] = P;
반환 p;
};