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 相关文章推荐
jquery键盘事件介绍
Jan 31 Javascript
再谈querySelector和querySelectorAll的区别与联系
Apr 20 Javascript
遍历DOM对象内的元素属性示例代码
Feb 08 Javascript
jQuery选择器源码解读(三):tokenize方法
Mar 31 Javascript
详解JavaScript中的表单验证
Jun 16 Javascript
js仿黑客帝国字母掉落效果代码分享
Nov 08 Javascript
JavaScript算法系列之快速排序(Quicksort)算法实例详解
Sep 04 Javascript
利用JS hash制作单页Web应用的方法详解
Oct 10 Javascript
基于VUE.JS的移动端框架Mint UI的使用
Oct 11 Javascript
jQuery插件实现非常实用的tab栏切换功能【案例】
Feb 18 jQuery
taro小程序添加骨架屏的实现代码
Nov 15 Javascript
浅析vue-router中params和query的区别
Dec 24 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 AJAX实例根据邮编自动完成地址信息
2008/11/23 PHP
php文本转图片自动换行的方法
2013/03/13 PHP
关于PHP二进制流 逐bit的低位在前算法(详解)
2013/06/13 PHP
php生成图片缩略图的方法
2015/04/07 PHP
PHP array_key_exists检查键名或索引是否存在于数组中的实现方法
2016/06/13 PHP
PHP编写daemon process 实例详解
2016/11/13 PHP
解决PhpStorm64不能启动的问题
2020/06/20 PHP
脚本吧 - 幻宇工作室用到js,超强推荐expand.js
2006/12/23 Javascript
jquery 弹出登录窗口实现代码
2009/12/24 Javascript
js 遍历对象的属性的代码
2011/12/29 Javascript
jquery中.add()的使用分析
2013/04/26 Javascript
jquery ajax 调用失败的原因示例介绍
2013/09/27 Javascript
利用Jquery实现可多选的下拉框
2014/02/21 Javascript
AngularJS基础知识
2014/12/21 Javascript
15个jquery常用方法、小技巧分享
2015/01/13 Javascript
微信小程序 页面之间传参实例详解
2017/01/13 Javascript
原生JavaScript实现的简单放大镜效果示例
2018/02/07 Javascript
this.$toast() 了解一下?
2019/04/18 Javascript
javascript移动端 电子书 翻页效果实现代码
2019/09/07 Javascript
细说webpack6 Babel的使用详解
2019/09/26 Javascript
JS实现盒子拖拽效果
2020/02/06 Javascript
Python的Django框架中TEMPLATES项的设置教程
2015/05/29 Python
Python 余弦相似度与皮尔逊相关系数 计算实例
2019/12/23 Python
在keras中获取某一层上的feature map实例
2020/01/24 Python
Python: glob匹配文件的操作
2020/12/11 Python
保密工作责任书
2014/04/16 职场文书
商务日语专业自荐信
2014/04/17 职场文书
检察院对照“四风”认真查找问题落实整改措施
2014/09/26 职场文书
工资收入证明
2014/10/07 职场文书
财务整改报告范文
2014/11/05 职场文书
出国签证在职证明范本
2014/11/24 职场文书
个人政治思想总结
2015/03/05 职场文书
卫生保健工作总结2015
2015/05/18 职场文书
中学语文教学反思
2016/02/16 职场文书
导游词之白茶谷九龙峡
2019/10/23 职场文书
《刺客之王:C罗全景传记》:时代从来不会亏待手艺人
2019/11/28 职场文书