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动态呼叫函数(两种方式)
May 03 Javascript
ParseInt函数参数设置介绍
Jan 02 Javascript
jquery清空表单数据示例分享
Feb 13 Javascript
鼠标经过子元素触发mouseout,mouseover事件的解决方案
Jul 26 Javascript
JS实现浏览器状态栏显示时间的方法
Oct 27 Javascript
javascript 解决浏览器不支持的问题
Sep 24 Javascript
微信JS-SDK自定义分享功能实例详解【分享给朋友/分享到朋友圈】
Nov 25 Javascript
实例解析Vue.js下载方式及基本概念
May 11 Javascript
简述vue状态管理模式之vuex
Aug 29 Javascript
vue router 通过路由来实现切换头部标题功能
Apr 24 Javascript
Vue中key的作用示例代码详解
Jun 10 Javascript
探究一道价值25k的蚂蚁金服异步串行面试题
Aug 21 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读取txt文件的内容并赋值给数组的代码
2011/11/03 PHP
php常用字符函数实例小结
2016/12/29 PHP
CI框架(CodeIgniter)实现的数据库增删改查操作总结
2018/05/23 PHP
php输出形式实例整理
2020/05/05 PHP
jquery1.5.1中根据元素ID获取元素对象的代码
2011/04/02 Javascript
NodeJS Web应用监听sock文件实例
2015/02/18 NodeJs
JavaScript生成随机字符串的方法
2015/03/19 Javascript
jQuery实现动态添加和删除一个div
2015/08/12 Javascript
浅析javascript函数表达式
2016/02/10 Javascript
jQuery扩展+xml实现表单验证功能的方法
2016/12/25 Javascript
JS验证不重复验证码
2017/02/10 Javascript
详解angular2实现ng2-router 路由和嵌套路由
2017/03/24 Javascript
JavaScript函数节流的两种写法
2017/04/07 Javascript
微信小程序表单验证错误提示效果
2017/05/19 Javascript
手把手教你把nodejs部署到linux上跑出hello world
2017/06/19 NodeJs
Javascript实现跨域后台设置拦截的方法详解
2017/08/04 Javascript
基于node打包可执行文件工具_Pkg使用心得分享
2018/01/24 Javascript
vue 动态组件(component :is) 和 dom元素限制(is)用法说明
2020/09/04 Javascript
python切换hosts文件代码示例
2013/12/31 Python
Python做智能家居温湿度报警系统
2018/09/25 Python
Python实现八皇后问题示例代码
2018/12/09 Python
opencv python图像梯度实例详解
2020/02/04 Python
异常和异常类的概念
2014/09/12 面试题
大三自我鉴定范文
2013/10/05 职场文书
高中语文教学反思
2014/01/16 职场文书
小学教学随笔感言
2014/02/26 职场文书
《桂花雨》教学反思
2014/04/12 职场文书
大学新学期计划书
2014/04/28 职场文书
餐厅周年庆活动方案
2014/08/25 职场文书
中学生自我评价范文
2015/03/03 职场文书
2015年学校德育工作总结
2015/04/22 职场文书
情侣之间的道歉短信
2015/05/12 职场文书
2016年母亲节广告语
2016/01/28 职场文书
微信小程序实现拍照和相册选取图片
2021/05/09 Javascript
面试被问select......for update会锁表还是锁行
2021/11/11 MySQL
PostgreSQL基于pgrouting的路径规划处理方法
2022/04/18 PostgreSQL