详解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命令行参数处理模块commander使用实例
Sep 17 NodeJs
快速掌握Node.js之Window下配置NodeJs环境
Mar 21 NodeJs
详解nodeJS中读写文件方法的区别
Mar 06 NodeJs
nodejs根据ip数组在百度地图中进行定位
Mar 06 NodeJs
Nodejs基于LRU算法实现的缓存处理操作示例
Mar 17 NodeJs
Nodejs中使用phantom将html转为pdf或图片格式的方法
Sep 18 NodeJs
使用nodeJs来安装less及编译less文件为css文件的方法
Nov 20 NodeJs
nodejs(officegen)+vue(axios)在客户端导出word文档的方法
Jul 31 NodeJs
nodejs遍历文件夹下并操作HTML/CSS/JS/PNG/JPG的方法
Nov 01 NodeJs
nodejs实现聊天机器人功能
Sep 19 NodeJs
如何利用nodejs实现命令行游戏
Nov 24 NodeJs
NodeJS和浏览器中this关键字的不同之处
Mar 03 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的输入输出流
2007/02/14 PHP
最新的php 文件上传模型,支持多文件上传
2009/08/13 PHP
用php解析html的实现代码
2011/08/08 PHP
php中将指针移动到数据集初始位置的实现代码[mysql_data_seek]
2012/11/01 PHP
php时间戳格式化显示友好的时间函数分享
2014/10/21 PHP
php实现通过ftp上传文件
2015/06/19 PHP
PHP实现适用于文件内容操作的分页类
2016/06/15 PHP
php实现QQ小程序发送模板消息功能
2019/09/18 PHP
PHP 枚举类型的管理与设计知识点总结
2020/02/13 PHP
js怎么终止程序return不行换jfslk
2013/05/30 Javascript
javascript实现文本域写入字符时限定字数
2014/02/12 Javascript
JS二维数组的定义说明
2014/03/03 Javascript
一个字符串中出现次数最多的字符 统计这个次数【实现代码】
2016/04/29 Javascript
jQuery实现摸拟alert提示框
2016/05/22 Javascript
jQuery中show与hide方法用法示例
2016/09/16 Javascript
jquery 实时监听输入框值变化的完美方法(必看)
2017/01/26 Javascript
Vue如何实现组件的源码解析
2017/06/08 Javascript
[47:52]DOTA2-DPC中国联赛正赛 iG vs LBZS BO3 第二场 3月4日
2021/03/11 DOTA
python根据经纬度计算距离示例
2014/02/16 Python
Python实现竖排打印传单手机号码易撕条
2015/03/16 Python
Python for Informatics 第11章之正则表达式(四)
2016/04/21 Python
Python利用Beautiful Soup模块搜索内容详解
2017/03/29 Python
Python批量修改图片分辨率的实例代码
2019/07/04 Python
python 标准差计算的实现(std)
2019/07/29 Python
pandas DataFrame的修改方法(值、列、索引)
2019/08/02 Python
Python3 读取Word文件方式
2020/02/13 Python
python——全排列数的生成方式
2020/02/26 Python
PageFactory设计模式基于python实现
2020/04/14 Python
Python如何测试stdout输出
2020/08/10 Python
小白教你PyCharm从下载到安装再到科学使用PyCharm2020最新激活码
2020/09/25 Python
HTML5移动端开发遇见的东西
2019/10/11 HTML / CSS
canvas因为图片资源不在同一域名下而导致的跨域污染画布的解决办法
2019/01/18 HTML / CSS
幼儿园消防安全制度
2014/01/26 职场文书
暑假社会实践证明格式
2014/10/28 职场文书
分居协议书范本
2014/11/03 职场文书
关于python3 opencv 图像二值化的问题(cv2.adaptiveThreshold函数)
2022/04/04 Python