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 相关文章推荐
JS实现Enter键跳转及控件获得焦点
Aug 12 Javascript
jquery实现的导航固定效果
Apr 28 Javascript
js运动动画的八个知识点
Mar 12 Javascript
JavaScript中闭包的写法和作用详解
Jun 29 Javascript
js,jq,css多方面实现简易下拉菜单功能
May 13 Javascript
详解如何构建Angular项目目录结构
Jul 13 Javascript
浅谈Node.js CVE-2017-14849 漏洞分析(详细步骤)
Nov 10 Javascript
详解jQuery中的easyui
Sep 02 jQuery
JS 实现微信扫一扫功能
Sep 14 Javascript
BootStrap table实现表格行拖拽效果
Dec 01 Javascript
微信小程序调用微信支付接口的实现方法
Apr 29 Javascript
通过angular CDK实现页面元素拖放的步骤详解
Jul 01 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
8个出色的WordPress SEO插件收集
2011/02/26 PHP
php reset() 函数指针指向数组中的第一个元素并输出实例代码
2016/11/21 PHP
微信封装的调用微信签名包的类库
2017/06/08 PHP
Extjs ajax同步请求时post方式参数发送方式
2009/08/05 Javascript
推荐20家国外的脚本下载网站
2011/04/28 Javascript
浅析ajax请求json数据并用js解析(示例分析)
2013/07/13 Javascript
禁止ajax缓存获取程序最新数据的方法
2013/11/19 Javascript
JS实现FLASH幻灯片图片切换效果的方法
2015/03/04 Javascript
JSON简介以及用法汇总
2016/02/21 Javascript
JS前端笔试题分析
2016/12/19 Javascript
javascript添加前置0(补零)的几种方法
2017/01/05 Javascript
基于vue实现swipe轮播组件实例代码
2017/05/24 Javascript
Vue组件之全局组件与局部组件的使用详解
2017/10/09 Javascript
p5.js 毕达哥拉斯树的实现代码
2018/03/23 Javascript
解决vue无法侦听数组及对象属性的变化问题
2020/07/17 Javascript
Vue 实现对quill-editor组件中的工具栏添加title
2020/08/03 Javascript
使用js原生实现年份轮播选择效果实例
2021/01/12 Javascript
Python3对称加密算法AES、DES3实例详解
2018/12/06 Python
解决Python pandas plot输出图形中显示中文乱码问题
2018/12/12 Python
Python简单I/O操作示例
2019/03/18 Python
详解Python3定时器任务代码
2019/09/23 Python
浅谈keras保存模型中的save()和save_weights()区别
2020/05/21 Python
建筑施工员岗位职责
2013/11/26 职场文书
竞聘上岗演讲稿范文
2014/01/10 职场文书
小学运动会表扬稿
2014/01/19 职场文书
好家长事迹材料
2014/01/23 职场文书
《冬阳童年骆驼队》教学反思
2014/04/15 职场文书
建设投标担保书
2014/05/13 职场文书
优秀少先队工作者事迹材料
2014/05/13 职场文书
中职毕业生自我鉴定范文(3篇)
2014/09/28 职场文书
就业推荐表导师评语
2014/12/31 职场文书
企业宣传稿范文
2015/07/23 职场文书
小米11和iphone12哪个值得买?小米11对比iphone12评测
2021/04/21 数码科技
html2 canvas svg不能识别的解决方案
2021/06/03 HTML / CSS
常用的Python代码调试工具总结
2021/06/23 Python
实体类或对象序列化时,忽略为空属性的操作
2021/06/30 Java/Android