详解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的前后端分离的思考与实践(三)轻量级的接口配置建模框架
Sep 26 NodeJs
轻松创建nodejs服务器(1):一个简单nodejs服务器例子
Dec 18 NodeJs
nodejs实现获取当前url地址及url各种参数值
Jun 25 NodeJs
NodeJs——入门必看攻略
Jun 27 NodeJs
Highcharts+NodeJS搭建数据可视化平台示例
Jan 01 NodeJs
Nodejs 发送Post请求功能(发短信验证码例子)
Feb 09 NodeJs
Nodejs 获取时间加手机标识的32位标识实现代码
Mar 07 NodeJs
详解nodejs微信公众号开发——3.封装消息响应模块
Apr 10 NodeJs
nodeJs实现基于连接池连接mysql的方法示例
Feb 10 NodeJs
nodejs实现的简单web服务器功能示例
Mar 15 NodeJs
nodejs express配置自签名https服务器的方法
May 22 NodeJs
如何利用nodejs自动定时发送邮件提醒(超实用)
Dec 01 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中执行系统外部命令
2006/10/09 PHP
php创建多级目录代码
2008/06/05 PHP
php中随机显示图片的函数代码
2011/06/23 PHP
PHP return语句另类用法不止是在函数中
2014/09/17 PHP
jQuery 白痴级入门教程
2009/11/11 Javascript
{}与function(){}选用空对象{}来存放keyValue
2012/05/23 Javascript
刷新页面的几种方法小结(JS,ASP.NET)
2014/01/07 Javascript
灵活的理解JavaScript中的this指向
2016/02/25 Javascript
Javascript缓存API
2016/06/14 Javascript
js正则表达式最长匹配(贪婪匹配)和最短匹配(懒惰匹配)用法分析
2016/12/27 Javascript
jquery表单插件form使用方法详解
2017/01/20 Javascript
使用JS 插件qrcode.js生成二维码功能
2017/02/20 Javascript
基于vue 实现token验证的实例代码
2017/12/14 Javascript
JavaScript多态与封装实例分析
2018/07/27 Javascript
Vue.js更改调试地址端口号的实例
2018/09/19 Javascript
使用p5.js临摹动态图形
2019/10/23 Javascript
如何实现vue的tree组件
2020/12/03 Vue.js
python 将字符串转换成字典dict
2013/03/24 Python
[原创]教女朋友学Python3(二)简单的输入输出及内置函数查看
2017/11/30 Python
python生成九宫格图片
2018/11/19 Python
在python中按照特定顺序访问字典的方法详解
2018/12/14 Python
Python3 itchat实现微信定时发送群消息的实例代码
2019/07/12 Python
基于pandas向csv添加新的行和列
2020/05/25 Python
python调用win32接口进行截图的示例
2020/11/11 Python
css3截图_动力节点Java学院整理
2017/07/11 HTML / CSS
加拿大鞋子连锁店:Town Shoes
2016/09/26 全球购物
美国珠宝精品店:Opulent Jewelers
2019/08/20 全球购物
技能竞赛活动方案
2014/02/21 职场文书
不拖欠农民工工资承诺书
2014/03/31 职场文书
中学生国旗下讲话稿
2014/04/26 职场文书
应届生自荐书
2014/06/23 职场文书
骨干教师考核评语
2014/12/31 职场文书
诚信教育主题班会
2015/08/13 职场文书
如果用一句诗总结你的上半年,你会用哪句呢?
2019/07/16 职场文书
微信小程序 根据不同用户切换不同TabBar
2022/04/21 Javascript
HTML静态页面获取url参数和UserAgent的实现
2022/08/05 HTML / CSS