详解nodeJS之路径PATH模块


Posted in NodeJs onMay 31, 2017

前面的话

path模块包含一系列处理和转换文件路径的工具集,通过 require('path') 可用来访问这个模块。本文将详细介绍path模块

路径组成

【path.dirname(p)】

返回路径p所在的目录

var path = require('path');
console.log(path.dirname('/foo/bar/baz/asdf/a.txt')); // /foo/bar/baz/asdf
console.log(path.dirname('/foo/bar/baz/asdf/')); // /foo/bar/baz
console.log(path.dirname('C:/test/aaa')); // C:/test

【path.basename(p[, ext])】

返回路径的最后一个部分,即文件名。参数ext为需要截掉的后缀内容 

var path = require('path');
console.log(path.basename('/foo/bar/baz/asdf/a.txt')); // a.txt
console.log(path.basename('/foo/bar/baz/asdf/a.txt','.txt')); // a
console.log(path.basename('/foo/bar/baz/asdf/')); // asdf
console.log(path.basename('C:/test/aaa')); // aaa

【path.extname(p)】

返回路径p的扩展名,从最后一个'.'到字符串的末尾。如果最后一个部分没有'.',或者路径是以'.'开头,则返回空字符串

var path = require('path');
console.log(path.extname('/foo/bar/baz/asdf/a.txt')); // .txt
console.log(path.extname('/foo/bar/baz/asdf/a.txt.b')); // .b
console.log(path.extname('/foo/bar/baz/asdf/a.')); // .
console.log(path.extname('C:/test/aaa/.')); // ''
console.log(path.extname('C:/test/aaa')); // ''

分隔符

【path.sep】

返回对应平台下的文件分隔符,win下为'\',*nix下为'/'

var path = require('path');
console.log(path.sep); // win下为\,*nix下为/
console.log('foo\\bar\\baz'.split(path.sep)); // [ 'foo', 'bar', 'baz' ]
console.log('foo/bar/baz'.split(path.sep)); // win下返回['foo/bar/baz'],但在*nix系统下会返回['foo','bar','baz']

【path.delimiter】

返回对应平台下的路径分隔符,win下为';',*nix下为':'

var path = require('path');
console.log(path.delimiter); //win下为“;”,*nix下为“:”
console.log(path.sep); // win下为\,*nix下为/

规范化

【path.normalize(p)】

规范化路径,处理冗余的“..”、“.”、“/”字符。发现多个斜杠时,会替换成一个斜杠。当路径末尾包含一个斜杠时,保留。Windows系统使用反斜杠 

var path = require('path');
console.log(path.normalize('a/b/c/../user/bin'));//a\b\user\bin
console.log(path.normalize('a/b/c///../user/bin/'));//a\b\user\bin\
console.log(path.normalize('a/b/c/../../user/bin'));//a\user\bin
console.log(path.normalize('a/b/c/.././///../user/bin/..'));//a\user
console.log(path.normalize('a/b/c/../../user/bin/../../'));//a\
console.log(path.normalize('a/../../user/bin/../../'));//..\
console.log(path.normalize('a/../../user/bin/../../../../'));//..\..\..\
console.log(path.normalize('./a/.././user/bin/./'));//user\bin\

【path.join([path1], [path2], [...])】

将多个路径结合在一起,并转换为规范化路径 

var path = require('path');
console.log(path.join('////./a', 'b////c', 'user/'));//\a\b\c\user
console.log(path.join('a', '../../', 'user/'));//..\user\

绝对和相对

【path.resolve([from ...], to)】

从源地址 from 到目的地址 to 的绝对路径,类似在shell里执行一系列的cd命令

path.resolve('foo/bar', '/tmp/file/', '..', 'a/../subfile')

类似于:

cd foo/bar
cd /tmp/file/
cd ..
cd a/../subfile
pwd

[注意]如果某个from或to参数是绝对路径(比如 'E:/abc',或是以“/”开头的路径),则将忽略之前的from参数

var path = require('path');
console.log(path.resolve('.', 'testFiles/..', 'trdLayer'));//D:\project\trdLayer
console.log(path.resolve('..', 'testFiles', 'a.txt'));//D:\testFiles\a.txt
console.log(path.resolve('D:', 'abc', 'D:/a'));//D:\a
console.log(path.resolve('abc', 'ok.gif'));//D:\project\abc\ok.gif
console.log(path.resolve('abc', '..', 'a/../subfile')); //D:\project\subfile

【path.isAbsolute(path)】

path是一个绝对路径(比如 'E:/abc'),或者是以“/”开头的路径,二者都会返回true

var path = require('path');
console.log(path.isAbsolute('../testFiles/secLayer'));//false
console.log(path.isAbsolute('./join.js'));//false
console.log(path.isAbsolute('temp'));//false
console.log(path.isAbsolute('/temp/../..'));//true
console.log(path.isAbsolute('E:/github/nodeAPI/abc/efg'));//true
console.log(path.isAbsolute('///temp123'));//true

 【path.relative(from, to)】

获取从 from 到 to 的相对路径,可以看作 path.resolve 的相反实现

path.resolve(from, path.relative(from, to)) == path.resolve(to)

var path = require('path');
console.log(path.relative('C:\\\test', 'C:\\\impl\\bbb'));//..\impl\bbb
console.log(path.relative('C:/test/aaa', 'C:/bbb'));//..\..\bbb
console.log(path.relative('C:/test/aaa', 'D:/bbb'));//D:\bbb

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

NodeJs 相关文章推荐
深入浅析NodeJs并发异步的回调处理
Dec 21 NodeJs
NodeJs——入门必看攻略
Jun 27 NodeJs
NodeJS使用formidable实现文件上传
Oct 27 NodeJs
详解nodejs微信jssdk后端接口
May 25 NodeJs
基于nodejs 的多页面爬虫实例代码
May 31 NodeJs
浅析 NodeJs 的几种文件路径
Jun 07 NodeJs
nodeJS实现简单网页爬虫功能的实例(分享)
Jun 08 NodeJs
Nodejs异步回调之异常处理实例分析
Jun 22 NodeJs
nodejs 如何手动实现服务器
Aug 20 NodeJs
nodejs实现范围请求的实现代码
Oct 12 NodeJs
基于Koa(nodejs框架)对json文件进行增删改查的示例代码
Feb 02 NodeJs
Nodejs实现用户注册功能
Apr 14 NodeJs
NodeJS实现微信公众号关注后自动回复功能
May 31 #NodeJs
nodejs操作mysql实现增删改查的实例
May 28 #NodeJs
详解nodejs微信jssdk后端接口
May 25 #NodeJs
mac下的nodejs环境安装的步骤
May 24 #NodeJs
Nodejs搭建wss服务器教程
May 24 #NodeJs
Nodejs中Express 常用中间件 body-parser 实现解析
May 22 #NodeJs
深入理解nodejs中Express的中间件
May 19 #NodeJs
You might like
解析如何屏蔽php中的phpinfo()函数
2013/06/06 PHP
php中try catch捕获异常实例详解
2014/11/21 PHP
php mysql操作mysql_connect连接数据库实例详解
2016/12/26 PHP
css值转换成数值请抛弃parseInt
2011/10/24 Javascript
JS链式调用的实现方法
2013/03/07 Javascript
使用js检测浏览器的实现代码
2013/05/14 Javascript
jquery操作checkbox实现全选和取消全选
2014/05/02 Javascript
JavaScript onkeypress事件入门实例(按下或按住一个键盘按键)
2014/10/17 Javascript
jquery中ajax使用error调试错误的方法
2015/02/08 Javascript
Bootstrap每天必学之下拉菜单
2015/11/25 Javascript
浅谈JS的基础类型与引用类型
2016/09/13 Javascript
微信小程序 教程之注册程序
2016/10/17 Javascript
vue2.0结合DataTable插件实现表格动态刷新的方法详解
2017/03/17 Javascript
ES6新数据结构Set与WeakSet用法分析
2017/03/31 Javascript
vue-cli入门之项目结构分析
2017/04/20 Javascript
jQuery日期范围选择器附源码下载
2017/05/23 jQuery
实例解析ES6 Proxy使用场景介绍
2018/01/08 Javascript
简单介绍Python的Django框架加载模版的方式
2015/07/20 Python
使用Python实现BT种子和磁力链接的相互转换
2015/11/09 Python
Python脚本实现虾米网签到功能
2016/04/12 Python
python的Tqdm模块的使用
2018/01/10 Python
解决Pandas to_json()中文乱码,转化为json数组的问题
2018/05/10 Python
创建pycharm的自定义python模板方法
2018/05/23 Python
Python2包含中文报错的解决方法
2018/07/09 Python
pycharm的console输入实现换行的方法
2019/01/16 Python
python3.6、opencv安装环境搭建过程(图文教程)
2019/11/05 Python
谈一谈数组拼接tf.concat()和np.concatenate()的区别
2020/02/07 Python
如何设置PyCharm中的Python代码模版(推荐)
2020/11/20 Python
Melissa香港官网:MDreams
2016/07/01 全球购物
银河香水:Galaxy Perfume
2019/03/25 全球购物
师范大学应届生求职信
2013/11/21 职场文书
销售工作岗位职责
2013/12/24 职场文书
函授生自我鉴定
2014/03/25 职场文书
离婚协议书怎么写
2015/01/26 职场文书
单位接收证明格式
2015/06/18 职场文书
vue使用echarts实现折线图
2022/03/21 Vue.js