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 解析后的xml对象的读取方法细解
Jul 25 Javascript
基于jQuery的消息提示插件之旅 DivAlert(三)
Apr 01 Javascript
5个最佳的Javascript日期处理类库分享
Apr 15 Javascript
javascript学习笔记(四) Number 数字类型
Jun 19 Javascript
JavaScript面向对象之Prototypes和继承
Jul 12 Javascript
Jquery中的$.each获取各种返回类型数据的使用方法
May 03 Javascript
比较常见的javascript中定义函数的区别
Nov 09 Javascript
gulp-htmlmin压缩html的gulp插件实例代码
Jun 06 Javascript
在vue中多次调用同一个定义全局变量的实例
Sep 25 Javascript
layui实现二维码弹窗、并下载到本地的方法
Sep 25 Javascript
JavaScript实现酷炫的鼠标拖尾特效
Feb 18 Javascript
vue组件vue-esign实现电子签名
Apr 21 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
php调用mysql存储过程
2007/02/14 PHP
15种PHP Encoder的比较
2007/03/06 PHP
利用PHP生成静态HTML文档的原理
2012/10/29 PHP
PHP 接入支付宝即时到账功能
2016/09/18 PHP
PHP实现多关键字加亮功能
2016/10/21 PHP
简单的JS多重继承示例
2008/03/13 Javascript
JavaScript获取页面上某个元素的代码
2011/03/13 Javascript
js生成缩略图后上传并利用canvas重绘
2014/05/15 Javascript
分享我对JS插件开发的一些感想和心得
2016/02/04 Javascript
JS组件Bootstrap按钮组与下拉按钮详解
2016/05/10 Javascript
Node.js的Koa框架上手及MySQL操作指南
2016/06/13 Javascript
js实现简单的选项卡效果
2017/02/23 Javascript
jQuery+CSS3实现点赞功能
2017/03/13 Javascript
最后说说Vue2 SSR 的 Cookies 问题
2018/05/25 Javascript
JS无限级导航菜单实现方法
2019/01/05 Javascript
Koa日志中间件封装开发详解
2019/03/09 Javascript
《javascript设计模式》学习笔记一:Javascript面向对象程序设计对象成员的定义分析
2020/04/07 Javascript
详解JavaScript 中的批处理和缓存
2020/11/19 Javascript
Python def函数的定义、使用及参数传递实现代码
2014/08/10 Python
python with statement 进行文件操作指南
2014/08/22 Python
Python实现数据库并行读取和写入实例
2017/06/09 Python
Python使用内置json模块解析json格式数据的方法
2017/07/20 Python
Python代码缩进和测试模块示例详解
2018/05/07 Python
Pytorch在dataloader类中设置shuffle的随机数种子方式
2020/01/14 Python
Python3内置函数chr和ord实现进制转换
2020/06/05 Python
css3实现冲击波效果的示例代码
2018/01/11 HTML / CSS
日本即尚网:JSHOPPERS.com(支持中文)
2019/12/03 全球购物
澳大利亚家用电器在线商店:Billy Guyatts
2020/05/05 全球购物
任命书格式
2014/06/05 职场文书
运动会广播稿50字-100字
2014/10/11 职场文书
党的群众路线教育实践活动总结大会主持词
2014/10/30 职场文书
教师外出学习心得体会
2016/01/18 职场文书
2016年社会管理综治宣传月活动总结
2016/03/16 职场文书
小学2016年“我们的节日·重阳节”活动总结
2016/04/01 职场文书
导游词之杭州西湖
2019/09/19 职场文书
Oracle 临时表空间SQL语句的实现
2021/09/25 Oracle