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 相关文章推荐
从父页面读取和操作iframe中内容方法
Jul 25 Javascript
JS运行耗时操作的延时显示方法
Nov 19 Javascript
JavaScript检测浏览器cookie是否已经启动的方法
Feb 27 Javascript
javascript实现网站加入收藏功能
Dec 16 Javascript
VUEJS实战之修复错误并且美化时间(2)
Jun 13 Javascript
Javascript+CSS3实现进度条效果
Oct 28 Javascript
Angular2入门--架构总览
Mar 29 Javascript
vue js秒转天数小时分钟秒的实例代码
Aug 08 Javascript
浅谈VUE单页应用首屏加载速度优化方案
Aug 28 Javascript
js实现图片局部放大效果详解
Mar 18 Javascript
es6中比较有用的7个技巧小结
Jul 12 Javascript
详解vue身份认证管理和租户管理
May 25 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中判断数组是一维,二维,还是多维的解决方法
2013/05/04 PHP
php截取字符串之截取utf8或gbk编码的中英文字符串示例
2014/03/12 PHP
PHP中if和or运行效率对比
2014/12/12 PHP
php+mysqli预处理技术实现添加、修改及删除多条数据的方法
2015/01/30 PHP
[原创]php简单隔行变色功能实现代码
2016/07/09 PHP
基于php数组中的索引数组和关联数组详解
2018/03/12 PHP
Thinkphp 框架扩展之驱动扩展实例分析
2020/04/27 PHP
JavaScript 计算图片加载数量的代码
2011/01/01 Javascript
JQuery对id中含有特殊字符的转义处理示例
2013/09/06 Javascript
js动态控制table的tr、td增加及删除的具体实现
2014/04/30 Javascript
javascript深拷贝(deepClone)详解
2016/08/24 Javascript
AngularJs bootstrap搭载前台框架——准备工作
2016/09/01 Javascript
AngularJS 在同一个界面启动多个ng-app应用模块详解
2016/12/20 Javascript
JavaScript全屏和退出全屏事件总结(附代码)
2017/08/17 Javascript
JavaScript实现开关等效果
2017/09/08 Javascript
vue移动端实现红包雨效果
2020/06/23 Javascript
Javascript异步编程async实现过程详解
2020/04/02 Javascript
three.js 制作动态二维码的示例代码
2020/07/31 Javascript
selenium+python自动化测试之环境搭建
2019/01/23 Python
Python异常模块traceback用法实例分析
2019/10/22 Python
pandas实现DataFrame显示最大行列,不省略显示实例
2019/12/26 Python
入党自我评价范文
2014/02/02 职场文书
优秀管理者事迹材料
2014/05/22 职场文书
淘宝活动总结范文
2014/06/26 职场文书
学习十八大的心得体会
2014/09/12 职场文书
数学教师个人工作总结
2015/02/06 职场文书
最感人的道歉情书
2015/05/12 职场文书
劳动仲裁代理词范文
2015/05/25 职场文书
2016寒假假期总结
2015/10/10 职场文书
2016年校园植树节广播稿
2015/12/17 职场文书
2016年度优秀辅导员事迹材料
2016/02/26 职场文书
幼儿园六一儿童节开幕词
2016/03/04 职场文书
解决Django transaction进行事务管理踩过的坑
2021/04/24 Python
Win7/8.1用户可以免费升级到Windows 11系统吗?
2021/11/21 数码科技
MySQL创建定时任务
2022/01/22 MySQL
Java代码规范与质量检测插件SonarLint的使用
2022/08/05 Java/Android