

同步版的 fs.realpath() 。
语法:
 代码如下:
fs.realpathSync(path, [cache])
由于该方法属于fs模块,使用前需要引入fs模块(var fs= require(“fs”) )
接收参数:
path 路径
cache 可选,一个文字的映射路径可用于强制一个特定的路径解决或避免额外的fs.stat需要知道真正的路径对象。
例子:
 代码如下:
var fs = require('fs');
 
// 点号表示当前文件所在路径
var str = fs.realpathSync('.');
console.log(str);
源码:
 代码如下:
fs.realpathSync = function realpathSync(p, cache) {
 // make p is absolute
 p = pathModule.resolve(p);
 if (cache && Object.prototype.hasOwnProperty.call(cache, p)) {
 return cache[p];
 }
 var original = p,
 seenLinks = {},
 knownHard = {};
 // current character position in p
 var pos;
 // the partial path so far, including a trailing slash if any
 var current;
 // the partial path without a trailing slash (except when pointing at a root)
 var base;
 // the partial path scanned in the previous round, with slash
 var previous;
 start();
 function start() {
 // Skip over roots
 var m = splitRootRe.exec(p);
 pos = m[0].length;
 current = m[0];
 base = m[0];
 previous = '';
 // On windows, check that the root exists. On unix there is no need.
 if (isWindows && !knownHard[base]) {
 fs.lstatSync(base);
 knownHard[base] = true;
 }
 }
 // walk down the path, swapping out linked pathparts for their real
 // values
 // NB: p.length changes.
 while (pos < p.length) {
 // find the next part
 nextPartRe.lastIndex = pos;
 var result = nextPartRe.exec(p);
 previous = current;
 current += result[0];
 base = previous + result[1];
 pos = nextPartRe.lastIndex;
 // continue if not a symlink
 if (knownHard[base] || (cache && cache[base] === base)) {
 continue;
 }
 var resolvedLink;
 if (cache && Object.prototype.hasOwnProperty.call(cache, base)) {
 // some known symbolic link. no need to stat again.
 resolvedLink = cache[base];
 } else {
 var stat = fs.lstatSync(base);
 if (!stat.isSymbolicLink()) {
 knownHard[base] = true;
 if (cache) cache[base] = base;
 continue;
 }
 // read the link if it wasn't read before
 // dev/ino always return 0 on windows, so skip the check.
 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(base);
 linkTarget = fs.readlinkSync(base);
 }
 resolvedLink = pathModule.resolve(previous, linkTarget);
 // track this, if given a cache.
 if (cache) cache[base] = resolvedLink;
 if (!isWindows) seenLinks[id] = linkTarget;
 }
 // resolve the link, then start over
 p = pathModule.resolve(resolvedLink, p.slice(pos));
 start();
 }
 if (cache) cache[original] = p;
 return p;
};
 
