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实现画板的代码
Sep 05 Javascript
jQuery Lightbox 图片展示插件使用说明
Apr 25 Javascript
js中AppendChild与insertBefore的用法详细解析
Dec 16 Javascript
JavaScript通过Date-Mask将日期转换成字符串的方法
Jun 04 Javascript
最新最热最实用的15个jQuery插件汇总
Jul 05 Javascript
Radio 单选JS动态添加的选项onchange事件无效的解决方法
Dec 12 Javascript
JavaScript创建对象的七种方式全面总结
Aug 21 Javascript
详解基于vue-cli配置移动端自适应
Jan 13 Javascript
vue2.0 自定义组件的方法(vue组件的封装)
Jun 05 Javascript
React组件重构之嵌套+继承及高阶组件详解
Jul 19 Javascript
swiper在vue项目中loop循环轮播失效的解决方法
Sep 15 Javascript
vue如何在data中引入图片的正确路径
Jun 05 Vue.js
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
CURL的学习和应用(附多线程实现)
2013/06/03 PHP
关于php程序报date()警告的处理(date_default_timezone_set)
2013/10/22 PHP
PHP高手需要要掌握的知识点
2014/08/21 PHP
PHP插件PHPMailer发送邮件功能
2017/02/28 PHP
php实现网页端验证码功能
2017/07/11 PHP
php常用字符串长度函数strlen()与mb_strlen()用法实例分析
2019/06/25 PHP
js继承 Base类的源码解析
2008/12/30 Javascript
JavaScript 学习笔记(六)
2009/12/31 Javascript
JavaScript自执行闭包的小例子
2013/06/29 Javascript
jQuery获得IE版本不准确webbrowser的解决方法
2014/02/23 Javascript
javascript轻量级模板引擎juicer使用指南
2014/06/22 Javascript
asp.net中oracle 存储过程(图文)
2015/08/12 Javascript
JavaScript中关联原型链属性特性
2016/02/13 Javascript
js滑动提示效果代码分享
2016/03/10 Javascript
浅析JavaScript中var that=this
2017/02/17 Javascript
Angularjs 动态添加指令并绑定事件的方法
2017/04/13 Javascript
Bootstrap的aria-label和aria-labelledby属性实例详解
2018/11/02 Javascript
JS中min函数实例讲解
2019/02/18 Javascript
VUE 实现动态给对象增加属性,并触发视图更新操作示例
2019/11/29 Javascript
Node.js 中判断一个文件是否存在
2020/08/24 Javascript
[11:33]DAC2018 4.5SOLO赛决赛 MidOne vs Paparazi第二场
2018/04/06 DOTA
[55:44]OG vs NAVI 2019国际邀请赛小组赛 BO2 第一场 8.15
2019/08/17 DOTA
pymssql ntext字段调用问题解决方法
2008/12/17 Python
Python使用matplotlib绘制随机漫步图
2018/08/27 Python
python语言元素知识点详解
2019/05/15 Python
基于Python执行dos命令并获取输出的结果
2019/12/30 Python
Python面向对象封装操作案例详解
2019/12/31 Python
Python爬虫抓取指定网页图片代码实例
2020/07/24 Python
美国第二大连锁书店:Books-A-Million
2017/12/28 全球购物
新西兰第一的行李箱网站:luggage.co.nz
2019/07/22 全球购物
美团网旗下网上订餐平台:美团外卖
2020/03/05 全球购物
美国狗旅行和户外用品领先供应商:kurgo
2020/08/18 全球购物
2014公安机关纪律作风整顿思想汇报
2014/09/13 职场文书
组织生活会发言材料
2014/12/15 职场文书
Vue全局事件总线你了解吗
2022/02/24 Vue.js
python超详细实现完整学生成绩管理系统
2022/03/17 Python