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 相关文章推荐
prettify 代码高亮着色器google出品
Dec 28 Javascript
Jquery公告滚动+AJAX后台得到数据
Apr 14 Javascript
jQuery(非HTML5)可编辑表格实现代码
Dec 11 Javascript
js获取 type=radio 值的方法
May 09 Javascript
JavaScript控制两个列表框listbox左右交换数据的方法
Mar 18 Javascript
JavaScript 浏览器兼容性总结及常用浏览器兼容性分析
Mar 30 Javascript
Bootstrap基本插件学习笔记之模态对话框(16)
Dec 08 Javascript
解决OneThink中无法异步提交kindeditor文本框中修改后的内容方法
May 05 Javascript
vue项目中添加单元测试的方法
Jul 21 Javascript
JQuery的加载和选择器用法简单示例
May 13 jQuery
VUE实时监听元素距离顶部高度的操作
Jul 29 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
深入理解require与require_once与include以及include_once的区别
2013/06/05 PHP
解析php框架codeigniter中如何使用框架的session
2013/06/24 PHP
php需登录的文件上传管理系统
2020/03/21 PHP
利用php输出不同的心形图案
2016/04/22 PHP
PHP简单预防sql注入的方法
2016/09/27 PHP
解决在laravel中auth建立时候遇到的问题
2019/10/15 PHP
判断客户端浏览器是否安装了Flash插件的多种方法
2010/08/11 Javascript
javascript对talbe进行动态添加、删除、验证实现代码
2012/03/29 Javascript
js获取 type=radio 值的方法
2014/05/09 Javascript
js监控IE火狐浏览器关闭、刷新、回退、前进事件
2014/07/23 Javascript
Node.js安装教程和NPM包管理器使用详解
2014/08/16 Javascript
浅析JS获取url中的参数实例代码
2016/06/14 Javascript
js 判断一组日期是否是连续的简单实例
2016/07/11 Javascript
ionic实现滑动的三种方式
2016/08/27 Javascript
jQuery插件echarts实现的单折线图效果示例【附demo源码下载】
2017/03/04 Javascript
BootStrap自定义popover,点击区域隐藏功能的实现
2018/01/23 Javascript
JS实现动态生成html table表格的方法分析
2018/07/11 Javascript
详解Vue源码中一些util函数
2019/04/24 Javascript
JavaScript前端实现压缩图片功能
2020/03/06 Javascript
ES6使用新特性Proxy实现的数据绑定功能实例
2020/05/11 Javascript
Python中django学习心得
2017/12/06 Python
利用Python在一个文件的头部插入数据的实例
2018/05/02 Python
解决django同步数据库的时候app models表没有成功创建的问题
2019/08/09 Python
10分钟入门CSS3 Animation
2018/12/25 HTML / CSS
html5中svg canvas和图片之间相互转化思路代码
2014/01/24 HTML / CSS
介绍一下SOA和SOA的基本特征
2016/02/24 面试题
教师推荐信范文
2013/11/24 职场文书
学校食堂采购员岗位职责
2013/12/05 职场文书
乡镇总工会学雷锋活动总结
2014/03/01 职场文书
校园学雷锋活动月总结
2014/03/09 职场文书
党员干部承诺书范文
2014/03/25 职场文书
九一八事变演讲稿
2014/09/05 职场文书
落实八项规定专题民主生活会对照检查材料
2014/09/15 职场文书
兼职安全员岗位职责
2015/02/15 职场文书
反腐倡廉观后感
2015/06/08 职场文书
幼儿园托班开学寄语(2016春季)
2015/12/03 职场文书