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 相关文章推荐
IE6下出现JavaScript未结束的字符串常量错误的解决方法
Nov 21 Javascript
js 有框架页面跳转(target)三种情况下的应用
Apr 09 Javascript
jquery 元素控制(追加元素/追加内容)介绍及应用
Apr 21 Javascript
原始XMLHttpRequest方法详情回顾
Nov 28 Javascript
js修改原型的属性使用介绍
Jan 26 Javascript
jQuery学习笔记之 Ajax操作篇(一) - 数据加载
Jun 23 Javascript
jQuery实现的一个自定义Placeholder属性插件
Aug 11 Javascript
jQuery实现网页抖动的菜单抖动效果
Aug 07 Javascript
Angular的Bootstrap(引导)和Compiler(编译)机制
Jun 20 Javascript
只要1K 纯JS脚本送你一朵3D红色玫瑰
Aug 09 Javascript
JavaScript数组复制详解
Feb 02 Javascript
python实现迭代法求方程组的根过程解析
Nov 25 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
火车采集器 免费版使出收费版本功能实现原理
2009/09/17 PHP
第4章 数据处理-php字符串的处理-郑阿奇(续)
2011/07/04 PHP
ThinkPHP自动填充实现无限级分类的方法
2014/08/22 PHP
php模拟post提交数据的方法
2015/02/12 PHP
通过PHP简单实例介绍文件上传
2015/12/16 PHP
PHP给文字内容中的关键字进行套红处理
2016/04/12 PHP
javascript new后的constructor属性
2010/08/05 Javascript
Google Dart编程语法和基本类型学习教程
2013/11/27 Javascript
js使用正则实现ReplaceAll全部替换的方法
2014/08/22 Javascript
让JavaScript和其它资源并发下载的方法
2014/10/16 Javascript
JS实现的生成随机数的4个函数分享
2015/02/11 Javascript
ajax跨域调用webservice的实现代码
2016/05/09 Javascript
基于Echarts 3.19 制作常用的图形(非静态)
2016/05/19 Javascript
用js写的一个路由(简单实例)
2016/09/24 Javascript
浅析Ajax语法
2016/12/05 Javascript
jQuery倒计时代码(超简单)
2017/02/27 Javascript
js判断用户是输入的地址请求的路径(实例讲解)
2017/07/18 Javascript
Iphone手机、安卓手机浏览器控制默认缩放大小的方法总结(附代码)
2017/08/18 Javascript
nodejs微信开发之接入指南
2019/03/17 NodeJs
微信小程序单选框自定义赋值
2020/05/26 Javascript
vue常用高阶函数及综合实例
2021/02/25 Vue.js
[02:51]2014DOTA2国际邀请赛 IG战队官方纪录片
2014/07/21 DOTA
跟老齐学Python之有容乃大的list(2)
2014/09/15 Python
DataFrame:通过SparkSql将scala类转为DataFrame的方法
2019/01/29 Python
python实现邮件循环自动发件功能
2020/09/11 Python
全球酒店比价网:HotelsCombined
2017/06/20 全球购物
Myprotein芬兰官网:欧洲第一运动营养品牌
2019/05/05 全球购物
阿联酋航空丹麦官方网站:Emirates DK
2019/08/25 全球购物
是否可以从一个static方法内部发出对非static方法的调用?
2014/08/18 面试题
副处级干部考察材料
2014/05/17 职场文书
小学运动会班级口号
2014/06/09 职场文书
2014年医院党建工作总结
2014/12/20 职场文书
寒假安全保证书
2015/02/28 职场文书
人民币符号
2022/02/17 杂记
TV动画《神废柴☆偶像》公布先导PV
2022/03/20 日漫
在vue中import()语法不能传入变量的问题及解决
2022/04/01 Vue.js