详解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访问ActiveX对象,以操作Access数据库为例。
Dec 15 NodeJs
Nodejs sublime text 3安装与配置
Jun 19 NodeJs
nodejs中使用monk访问mongodb
Jul 06 NodeJs
基于NodeJS+MongoDB+AngularJS+Bootstrap开发书店案例分析
Jan 12 NodeJs
NodeJS基础API搭建服务器详细过程记录
Apr 01 NodeJs
深入理解Nodejs Global 模块
Jun 03 NodeJs
使用Nodejs连接mongodb数据库的实现代码
Aug 21 NodeJs
nodejs中express入门和基础知识点学习
Sep 13 NodeJs
nodejs中用npm初始化来创建package.json的实例讲解
Oct 10 NodeJs
独立部署小程序基于nodejs的服务器过程详解
Jun 24 NodeJs
nodejs一个简单的文件服务器的创建方法
Sep 13 NodeJs
nodejs对mongodb数据库的增加修删该查实例代码
Jan 05 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
各种咖啡的英文名子是什么
2021/03/03 新手入门
发挥语言的威力--融合PHP与ASP
2006/10/09 PHP
模板引擎Smarty深入浅出介绍
2006/12/06 PHP
php记录搜索引擎爬行记录的实现代码
2018/03/02 PHP
thinkPHP框架实现多表查询的方法
2018/06/14 PHP
Laravel访问出错提示:`Warning: require(/vendor/autoload.php): failed to open stream: No such file or di解决方法
2019/04/02 PHP
提高网站性能之 如何对待JavaScript
2009/10/31 Javascript
JSON 学习之JSON in JavaScript详细使用说明
2010/02/23 Javascript
js 金额格式化来回转换示例
2014/02/23 Javascript
jQuery实现自动切换播放的经典滑动门效果
2015/09/12 Javascript
jQuery实现鼠标悬停背景翻转的黑色导航菜单代码
2015/09/14 Javascript
利用n工具轻松管理Node.js的版本
2017/04/21 Javascript
AngularJS入门教程二:在路由中传递参数的方法分析
2017/05/27 Javascript
JS查找数组中重复元素的方法详解
2017/06/14 Javascript
ReactNative列表ListView的用法
2017/08/02 Javascript
详解KOA2如何手写中间件(装饰器模式)
2018/10/11 Javascript
基于Vue实现电商SKU组合算法问题
2019/05/29 Javascript
jdk1.8+vue elementui实现多级菜单功能
2020/09/24 Javascript
vue $router和$route的区别详解
2020/12/02 Vue.js
[48:39]Ti4主赛事胜者组第一天 EG vs NEWBEE 2
2014/07/19 DOTA
深入浅析python定时杀进程
2016/06/06 Python
对python程序内存泄漏调试的记录
2018/06/11 Python
Python基于多线程操作数据库相关问题分析
2018/07/11 Python
python DataFrame转dict字典过程详解
2019/12/26 Python
Python图像处理库PIL的ImageDraw模块介绍详解
2020/02/26 Python
Python super()方法原理详解
2020/03/31 Python
Python基础进阶之海量表情包多线程爬虫功能的实现
2020/12/17 Python
Python 可视化神器Plotly详解
2020/12/26 Python
ASOS比利时:英国线上零售商及自有品牌
2018/07/29 全球购物
时尚圣经:The Fashion Bible
2019/03/03 全球购物
King Apparel官网:英国街头服饰品牌
2019/09/05 全球购物
会计电算化大学生职业规划书
2014/02/05 职场文书
求职简历自我评价范例
2014/03/12 职场文书
优质服务活动实施方案
2014/05/02 职场文书
员工薪酬激励方案
2014/06/13 职场文书
2014年自愿离婚协议书范本
2014/09/25 职场文书