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字典探测用户名工具
Oct 05 Javascript
Javascript常用运算符(Operators)-javascript基础教程
Dec 14 Javascript
JS判断元素为数字的奇异写法分享
Aug 01 Javascript
jQuery方法简洁实现隔行换色及toggleClass的使用
Mar 15 Javascript
jquery实现简单的自动播放幻灯片效果
Jun 13 Javascript
jquery按回车键实现表单提交的简单实例
May 25 Javascript
微信 java 实现js-sdk 图片上传下载完整流程
Oct 21 Javascript
JS获取当前地理位置的方法
Oct 25 Javascript
vuex页面刷新后数据丢失的方法
Jan 17 Javascript
详解js根据百度地图提供经纬度计算两点距离
May 13 Javascript
bootstrap table实现iview固定列的效果实例代码详解
Sep 30 Javascript
如何基于viewport vm适配移动端页面
Nov 13 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
解析ajax事件的调用顺序
2013/06/17 PHP
php中apc缓存使用示例
2013/12/25 PHP
IIS6.0 开启Gzip方法及PHP Gzip函数分享
2014/06/08 PHP
php实现Mysql简易操作类
2015/10/11 PHP
利用laravel+ajax实现文件上传功能方法示例
2017/08/13 PHP
JavaScript 学习笔记(五)
2009/12/31 Javascript
基于jquery的simpleValidate简易验证插件
2014/01/31 Javascript
JavaScript小技巧整理篇(非常全)
2016/01/26 Javascript
BootStrap扔进Django里的方法详解
2016/05/13 Javascript
jQuery操作dom实现弹出页面遮罩层(web端和移动端阻止遮罩层的滑动)
2016/08/25 Javascript
D3.js实现直方图的方法详解
2016/09/25 Javascript
jQuery源码分析之sizzle选择器详解
2017/02/13 Javascript
微信小程序实现倒计时补零功能
2018/07/09 Javascript
微信小程序实现通过js操作wxml的wxss属性示例
2018/12/06 Javascript
vue基础之模板和过滤器用法实例分析
2019/03/12 Javascript
node实现socket链接与GPRS进行通信的方法
2019/05/20 Javascript
js微信分享接口调用详解
2019/07/23 Javascript
举例讲解Python编程中对线程锁的使用
2016/07/12 Python
django admin 后台实现三级联动的示例代码
2018/06/22 Python
对python 合并 累加两个dict的实例详解
2019/01/21 Python
使用Python中的reduce()函数求积的实例
2019/06/28 Python
Python列表(list)所有元素的同一操作解析
2019/08/01 Python
基于Python实现拆分和合并GIF动态图
2019/10/22 Python
浅谈tensorflow使用张量时的一些注意点tf.concat,tf.reshape,tf.stack
2020/06/23 Python
纯CSS3实现3D旋转书本效果
2016/03/21 HTML / CSS
奢华时尚的独特视角:La Garçonne
2018/06/07 全球购物
EMPHASIS艾斐诗官网:周生生旗下原创精品珠宝品牌
2020/12/17 全球购物
行政主管岗位职责
2013/11/18 职场文书
素食餐饮项目创业计划书
2014/02/02 职场文书
高中家长寄语
2014/04/02 职场文书
大班上学期幼儿评语
2014/04/30 职场文书
物业客服专员岗位职责
2015/04/07 职场文书
六年级上册《闻官军收河南河北》的教学设计
2019/11/15 职场文书
Java数据开发辅助工具Docker与普通程序使用方法
2021/09/15 Java/Android
前端使用svg图片改色实现示例
2022/07/23 HTML / CSS
MySQL中LAG()函数和LEAD()函数的使用
2022/08/14 MySQL