详解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打包工具整合到鼠标右键的方法
May 11 NodeJs
nodeJS删除文件方法示例
Dec 25 NodeJs
详解nodejs操作mongodb数据库封装DB类
Apr 10 NodeJs
用Nodejs搭建服务器访问html、css、JS等静态资源文件
Apr 28 NodeJs
nodejs处理图片的中间件node-images详解
May 08 NodeJs
Nodejs使用Mongodb存储与提供后端CRD服务详解
Sep 04 NodeJs
nodejs同步调用获取mysql数据时遇到的大坑
Mar 02 NodeJs
nodejs二进制与Buffer的介绍与使用
Jul 11 NodeJs
nodejs实现聊天机器人功能
Sep 19 NodeJs
nodeJs的安装与npm全局环境变量的配置详解
Jan 06 NodeJs
nodejs nedb 封装库与使用方法示例
Feb 06 NodeJs
浅谈vue websocket nodeJS 进行实时通信踩到的坑
Sep 22 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去掉字符串的最后一个字符附substr()的用法
2011/03/23 PHP
php中用数组的方法设置cookies
2011/04/21 PHP
Symfony2开发之控制器用法实例分析
2016/02/05 PHP
微信公众号判断用户是否已关注php代码解析
2016/06/24 PHP
PHP实现微信提现功能(微信商城)
2019/11/21 PHP
js验证IP及子网掩码的合法性有效性示例
2014/04/30 Javascript
Windows系统下使用Sublime搭建nodejs环境
2015/04/13 NodeJs
浅谈JavaScript中的Math.atan()方法的使用
2015/06/14 Javascript
延时加载JavaScript代码提高速度
2015/12/27 Javascript
完善的jquery处理机制
2016/02/21 Javascript
js中json处理总结之JSON.parse
2016/10/14 Javascript
原生JS实现的放大镜效果实例代码
2016/10/15 Javascript
JS实现的驼峰式和连字符式转换功能分析
2016/12/21 Javascript
Bootstrap modal 多弹窗之叠加显示不出弹窗问题的解决方案
2017/02/23 Javascript
p5.js实现斐波那契螺旋的示例代码
2018/03/22 Javascript
vue搜索和vue模糊搜索代码实例
2019/05/07 Javascript
微信小程序canvas动态时钟
2020/10/22 Javascript
python中字符串前面加r的作用
2015/06/04 Python
深入解析Python中的urllib2模块
2015/11/13 Python
详谈Numpy中数组重塑、合并与拆分方法
2018/04/17 Python
python实现函数极小值
2019/07/10 Python
Python的条件锁与事件共享详解
2019/09/12 Python
Python socket服务常用操作代码实例
2020/06/22 Python
Python如何读写CSV文件
2020/08/13 Python
Python LMDB库的使用示例
2021/02/14 Python
使用html2canvas实现将html内容写入到canvas中生成图片
2020/01/03 HTML / CSS
英国领先的高街书籍专家:Waterstones
2018/02/01 全球购物
俄罗斯在线水暖商店:Perfecto.ru
2019/10/25 全球购物
美团网旗下网上订餐平台:美团外卖
2020/03/05 全球购物
Collection和Collections的区别
2016/05/02 面试题
学雷锋先进个人事迹
2014/05/26 职场文书
节电标语大全
2014/06/23 职场文书
2015年六一儿童节活动方案
2015/05/05 职场文书
2016元旦主持人开场白
2015/12/03 职场文书
迎客户欢迎词三篇
2019/09/27 职场文书
关于ObjectUtils.isEmpty() 和 null 的区别
2022/02/28 Java/Android