node.js中的fs.realpathSync方法使用说明


Posted in Javascript onDecember 16, 2014

方法说明:

同步版的 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;

};
Javascript 相关文章推荐
Javascript之旅 对象的原型链之由来
Aug 25 Javascript
Dom与浏览器兼容性说明
Oct 25 Javascript
jquery 页面滚动到底部自动加载插件集合
Jan 31 Javascript
JavaScript支持的最大递归调用次数分析
Jun 24 Javascript
javascript基本类型详解
Nov 28 Javascript
jquery动态切换背景图片的简单实现方法
May 14 Javascript
jQuery3.0中的buildFragment私有函数详解
Aug 16 Javascript
bootstrap精简教程_动力节点Java学院整理
Jul 14 Javascript
Vue添加请求拦截器及vue-resource 拦截器使用
Nov 23 Javascript
Vue.js组件间的循环引用方法示例
Dec 27 Javascript
原生JavaScript写出Tabs标签页的实例代码
Jul 20 Javascript
javascript实现滚轮轮播图片
Dec 13 Javascript
node.js中的fs.realpath方法使用说明
Dec 16 #Javascript
node.js中的fs.renameSync方法使用说明
Dec 16 #Javascript
node.js中的fs.rename方法使用说明
Dec 16 #Javascript
关于Javascript加载执行优化的研究报告
Dec 16 #Javascript
jQuery 重复加载错误以及修复方法
Dec 16 #Javascript
node.js中的fs.lstatSync方法使用说明
Dec 16 #Javascript
node.js中的fs.lstat方法使用说明
Dec 16 #Javascript
You might like
php中支持多种编码的中文字符串截取函数!
2007/03/20 PHP
php htmlspecialchars加强版
2010/02/16 PHP
PHP使用mysqldump命令导出数据库
2015/04/14 PHP
yii2 页面底部加载css和js的技巧
2016/04/21 PHP
详解PHP处理字符串类似indexof的方法函数
2017/06/11 PHP
PHP机器学习库php-ml的简单测试和使用方法
2017/07/14 PHP
PHP设计模式之适配器模式(Adapter)原理与用法详解
2019/12/12 PHP
非常好的js代码
2006/06/27 Javascript
qq悬浮代码(兼容各个浏览器)
2014/01/29 Javascript
网站繁简切换的JS遇到页面卡死的解决方法
2014/03/12 Javascript
无刷新预览所选择的图片示例代码
2014/04/02 Javascript
jQuery继承extend用法详解
2016/10/10 Javascript
使用jQuery实现购物车结算功能
2017/08/15 jQuery
react中使用swiper的具体方法
2018/05/15 Javascript
vue2.0 可折叠列表 v-for循环展示的实例
2018/09/07 Javascript
vue.js使用v-model实现表单元素(input) 双向数据绑定功能示例
2019/03/08 Javascript
解决新建一个vue项目过程中遇到的问题
2020/10/22 Javascript
Python同时向控制台和文件输出日志logging的方法
2015/05/26 Python
详解MySQL数据类型int(M)中M的含义
2016/11/20 Python
利用Python实现网络测试的脚本分享
2017/05/26 Python
Python3 循环语句(for、while、break、range等)
2017/11/20 Python
widows下安装pycurl并利用pycurl请求https地址的方法
2018/10/15 Python
Python中turtle库的使用实例
2019/09/09 Python
python线程池如何使用
2020/05/28 Python
Python3如何使用range函数替代xrange函数
2020/10/05 Python
python爬虫使用scrapy注意事项
2020/11/23 Python
Electric官网:美国高级眼镜和配件品牌
2020/06/04 全球购物
大学生自我鉴定书
2014/03/24 职场文书
综合素质评价思想道德自我评价
2015/03/09 职场文书
2015年学习部工作总结范文
2015/03/31 职场文书
工作迟到检讨书范文
2015/05/06 职场文书
2015年财务部年度工作总结
2015/05/19 职场文书
解除合同协议书范本
2016/03/21 职场文书
导游词之天津盘山
2019/11/01 职场文书
python的netCDF4批量处理NC格式文件的操作方法
2022/03/21 Python
Windows下载并安装MySQL8.0.x 版本的完整教程
2022/04/10 MySQL