| 方法说明: 同步版的 fs.realpath() 。 语法: 复制代码 代码如下:fs.realpathSync(path, [cache])
 
 由于该方法属于fs模块,使用前需要引入fs模块(var fs= require(“fs”) ) 接收参数: pathnbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp; 路径 cachenbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp; 可选,一个文字的映射路径可用于强制一个特定的路径解决或避免额外的fs.stat需要知道真正的路径对象。 例子: 复制代码 代码如下:var fs = require('fs');
 nbsp;
 // 点号表示当前文件所在路径
 var str = fs.realpathSync('.');
 console.log(str);
 
 源码: 复制代码 代码如下:fs.realpathSync = function realpathSync(p, cache) {
 nbsp; // make p is absolute
 nbsp; p = pathModule.resolve(p);
 nbsp; if (cache  Object.prototype.hasOwnProperty.call(cache, p)) {
 nbsp;nbsp;nbsp; return cache[p];
 nbsp; }
 nbsp; var original = p,
 nbsp;nbsp;nbsp;nbsp;nbsp; seenLinks = {},
 nbsp;nbsp;nbsp;nbsp;nbsp; knownHard = {};
 nbsp; // current character position in p
 nbsp; var pos;
 nbsp; // the partial path so far, including a trailing slash if any
 nbsp; var current;
 nbsp; // the partial path without a trailing slash (except when pointing at a root)
 nbsp; var base;
 nbsp; // the partial path scanned in the previous round, with slash
 nbsp; var previous;
 nbsp; start();
 nbsp; function start() {
 nbsp;nbsp;nbsp; // Skip over roots
 nbsp;nbsp;nbsp; var m = splitRootRe.exec(p);
 nbsp;nbsp;nbsp; pos = m[0].length;
 nbsp;nbsp;nbsp; current = m[0];
 nbsp;nbsp;nbsp; base = m[0];
 nbsp;nbsp;nbsp; previous = '';
 nbsp;nbsp;nbsp; // On windows, check that the root exists. On unix there is no need.
 nbsp;nbsp;nbsp; if (isWindows  !knownHard[base]) {
 nbsp;nbsp;nbsp;nbsp;nbsp; fs.lstatSync(base);
 nbsp;nbsp;nbsp;nbsp;nbsp; knownHard[base] = true;
 nbsp;nbsp;nbsp; }
 nbsp; }
 nbsp; // walk down the path, swapping out linked pathparts for their real
 nbsp; // values
 nbsp; // NB: p.length changes.
 nbsp; while (pos lt; p.length) {
 nbsp;nbsp;nbsp; // find the next part
 nbsp;nbsp;nbsp; nextPartRe.lastIndex = pos;
 nbsp;nbsp;nbsp; var result = nextPartRe.exec(p);
 nbsp;nbsp;nbsp; previous = current;
 nbsp;nbsp;nbsp; current += result[0];
 nbsp;nbsp;nbsp; base = previous + result[1];
 nbsp;nbsp;nbsp; pos = nextPartRe.lastIndex;
 nbsp;nbsp;nbsp; // continue if not a symlink
 nbsp;nbsp;nbsp; if (knownHard[base] || (cache  cache[base] === base)) {
 nbsp;nbsp;nbsp;nbsp;nbsp; continue;
 nbsp;nbsp;nbsp; }
 nbsp;nbsp;nbsp; var resolvedLink;
 nbsp;nbsp;nbsp; if (cache  Object.prototype.hasOwnProperty.call(cache, base)) {
 nbsp;nbsp;nbsp;nbsp;nbsp; // some known symbolic link. no need to stat again.
 nbsp;nbsp;nbsp;nbsp;nbsp; resolvedLink = cache[base];
 nbsp;nbsp;nbsp; } else {
 nbsp;nbsp;nbsp;nbsp;nbsp; var stat = fs.lstatSync(base);
 nbsp;nbsp;nbsp;nbsp;nbsp; if (!stat.isSymbolicLink()) {
 nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp; knownHard[base] = true;
 nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp; if (cache) cache[base] = base;
 nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp; continue;
 nbsp;nbsp;nbsp;nbsp;nbsp; }
 nbsp;nbsp;nbsp;nbsp;nbsp; // read the link if it wasn't read before
 nbsp;nbsp;nbsp;nbsp;nbsp; // dev/ino always return 0 on windows, so skip the check.
 nbsp;nbsp;nbsp;nbsp;nbsp; var linkTarget = null;
 nbsp;nbsp;nbsp;nbsp;nbsp; if (!isWindows) {
 nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp; var id = stat.dev.toString(32) + ':' + stat.ino.toString(32);
 nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp; if (seenLinks.hasOwnProperty(id)) {
 nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp; linkTarget = seenLinks[id];
 nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp; }
 nbsp;nbsp;nbsp;nbsp;nbsp; }
 nbsp;nbsp;nbsp;nbsp;nbsp; if (util.isNull(linkTarget)) {
 nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp; fs.statSync(base);
 nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp; linkTarget = fs.readlinkSync(base);
 nbsp;nbsp;nbsp;nbsp;nbsp; }
 nbsp;nbsp;nbsp;nbsp;nbsp; resolvedLink = pathModule.resolve(previous, linkTarget);
 nbsp;nbsp;nbsp;nbsp;nbsp; // track this, if given a cache.
 nbsp;nbsp;nbsp;nbsp;nbsp; if (cache) cache[base] = resolvedLink;
 nbsp;nbsp;nbsp;nbsp;nbsp; if (!isWindows) seenLinks[id] = linkTarget;
 nbsp;nbsp;nbsp; }
 nbsp;nbsp;nbsp; // resolve the link, then start over
 nbsp;nbsp;nbsp; p = pathModule.resolve(resolvedLink, p.slice(pos));
 nbsp;nbsp;nbsp; start();
 nbsp; }
 nbsp; if (cache) cache[original] = p;
 nbsp; return p;
 };
 
 (编辑:南平站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |