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客户端将指定区域导出到Word、Excel的代码
Oct 22 Javascript
判断是否安装flash player及当前版本的JS代码
Aug 08 Javascript
JavaScript运行机制之事件循环(Event Loop)详解
Oct 10 Javascript
Web开发必知Javascript技巧大全
Feb 23 Javascript
Ubuntu系统下Angularjs开发环境安装
Sep 01 Javascript
jQuery实现带遮罩层效果的blockUI弹出层示例【附demo源码下载】
Sep 14 Javascript
jquery插件bootstrapValidator数据验证详解
Nov 09 Javascript
JavaScript ES6中const、let与var的对比详解
Jun 18 Javascript
JS计算距当前时间的时间差实例
Dec 29 Javascript
Chart.js 轻量级HTML5图表绘制工具库(知识整理)
May 22 Javascript
p5.js临摹动态图形实现方法详解
Oct 23 Javascript
vue路由传参三种基本方式详解
Dec 09 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获取文章上一页与下一页的方法
2014/12/01 PHP
CakePHP框架Session设置方法分析
2017/02/23 PHP
出现“不能执行已释放的Script代码”错误的原因及解决办法
2007/08/29 Javascript
jquery.cvtooltip.js 基于jquery的气泡提示插件
2010/11/19 Javascript
js substr、substring和slice使用说明小记
2011/09/15 Javascript
仿当当网淘宝网等主流电子商务网站商品分类导航菜单
2013/09/25 Javascript
JavaScript调试技巧之console.log()详解
2014/03/19 Javascript
javascript 中__proto__和prototype详解
2014/11/25 Javascript
JavaScript显示当前文档最后修改日期的方法
2015/03/19 Javascript
使用jQuery加载html页面到指定的div实现方法
2016/07/13 Javascript
jquery.Callbacks的实现详解
2016/11/30 Javascript
使用get方式提交表单在地址栏里面不显示提交信息
2017/02/21 Javascript
react-native ListView下拉刷新上拉加载实现代码
2017/08/03 Javascript
微信小程序picker组件下拉框选择input输入框的实例
2017/09/20 Javascript
nodejs实现范围请求的实现代码
2018/10/12 NodeJs
vue中过滤器filter的讲解
2019/01/21 Javascript
Vue中通过Vue.extend动态创建实例的方法
2019/08/13 Javascript
IDEA安装vue插件图文详解
2019/09/26 Javascript
Vue $emit()不能触发父组件方法的原因及解决
2020/07/28 Javascript
Python编程中的反模式实例分析
2014/12/08 Python
Python访问纯真IP数据库脚本分享
2015/06/29 Python
浅谈Python中的zip()与*zip()函数详解
2018/02/24 Python
Pandas读取MySQL数据到DataFrame的方法
2018/07/25 Python
用Python实现大文本文件切割的方法
2019/01/12 Python
Python编程中类与类的关系详解
2019/08/08 Python
Python实现进度条和时间预估的示例代码
2020/06/02 Python
美国著名的家居用品购物网站:Bed Bath & Beyond
2018/01/05 全球购物
6号汽车旅馆预订:Motel 6
2018/02/11 全球购物
数据库测试通常都包括哪些方面
2015/11/30 面试题
满月酒答谢词
2014/01/14 职场文书
上班玩游戏检讨书
2014/02/07 职场文书
《祁黄羊》教学反思
2014/04/22 职场文书
工伤私了协议书范本
2014/11/24 职场文书
品牌形象定位,全面分析
2019/07/23 职场文书
Python 使用dict实现switch的操作
2021/04/07 Python
MySQL数据库事务的四大特性
2022/04/20 MySQL