방법 설명:
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 = 함수 realpathSync(p, 캐시) {
// p를 절대값으로 설정
p = pathModule.resolve(p);
if (cache && Object.prototype.hasOwnProperty.call(cache, p)) {
캐시 반환[p];
}
var 원본 = p,
seeLinks = {},
KnownHard = {};
// p의 현재 문자 위치
var pos;
// 지금까지의 부분 경로(있는 경우 후행 슬래시 포함)
var 전류;
// 후행 슬래시가 없는 부분 경로(루트를 가리키는 경우 제외)
var 베이스;
// 이전 라운드에서 스캔한 부분 경로(슬래시 포함)
var 이전;
시작();
함수 시작() {
// 루트 건너뛰기
var m = SplitRootRe.exec(p);
위치 = m[0].length;
전류 = m[0];
기본 = m[0];
이전 = '';
// Windows에서는 루트가 존재하는지 확인합니다. 유닉스에서는 필요하지 않습니다.
if (isWindows && !knownHard[base]) {
fs.lstatSync(기본);
알려진 하드[베이스] = true;
}
}
// 경로를 따라 걸어가면서 연결된 경로 부분을 실제 경로 부분으로 교체합니다
// 값
// 주의: p.length가 변경됩니다.
while (pos < p.length) {
// 다음 부분 찾기
nextPartRe.lastIndex = pos;
var 결과 = nextPartRe.exec(p);
이전 = 현재;
현재 = 결과[0];
기본 = 이전 결과[1];
pos = nextPartRe.lastIndex;
// 심볼릭 링크가 아닌 경우 계속
if (knownHard[base] || (cache && 캐시[base] === base)) {
계속;
}
var 해결Link;
if (cache && Object.prototype.hasOwnProperty.call(cache, base)) {
// 알려진 심볼릭 링크. 다시 통계를 낼 필요가 없습니다.
해결링크 = 캐시[베이스];
} 그 밖의 {
var stat = fs.lstatSync(base);
if (!stat.isSymbolicLink()) {
알려진 하드[베이스] = true;
if (캐시) 캐시[베이스] = 베이스;
계속;
}
// 이전에 읽지 않았다면 링크를 읽습니다
// dev/ino는 Windows에서 항상 0을 반환하므로 확인을 건너뜁니다.
var linkTarget = null;
if (!isWindows) {
var id = stat.dev.toString(32) ':' stat.ino.toString(32);
if (seenLinks.hasOwnProperty(id)) {
linkTarget = seeLinks[id];
}
}
if (util.isNull(linkTarget)) {
fs.statSync(기본);
linkTarget = fs.readlinkSync(base);
}
해결링크 = pathModule.resolve(이전, linkTarget);
// 캐시가 제공되면 이를 추적합니다.
if (캐시) 캐시[베이스] = 해결링크;
if (!isWindows) seeLinks[id] = linkTarget;
}
// 링크를 해결한 후 다시 시작하세요
p = pathModule.resolve(resolvedLink, p.slice(pos));
시작();
}
if (캐시) 캐시[원본] = p;
반환 p;
};