Node.js教程 Node.js path相关方法详解
沉沙 2018-07-25 来源 : 阅读 720 评论 0

摘要:本篇Node.js教程探讨了Node.js path相关方法,希望阅读本篇文章以后大家有所收获,帮助大家对Node.js的理解更加深入。

本篇Node.js教程探讨了Node.js path相关方法,希望阅读本篇文章以后大家有所收获,帮助大家对Node.js的理解更加深入。

在搭建ES6环境需要自己写gulpfile.js配置时,发现里面用到了node.js中的一部分内容——path。

配置中有这样一行代码:

const from = path.join(_dirname, './appes6/js');   //d:/Users/xxchi/Desktop/ES6/appes6/js

这是什么意思呢?

1、const ES6语法声明一个不可以改变的只读常量from。

2、path.join 是node.js中用path模块连接路径,即链接 _dirname 和 ./appes6/js

3、_dirname 在node.js中会返回该文件所在文件夹的位置,即gulpfile.js所在文件夹的位置(d:/Users/xxchi/Desktop/ES6)

拼接后就得到了d:/Users/xxchi/Desktop/ES6/appes6/js这个结果。

注意:使用path模块前必须先引入该模块

import path from 'path'

Node.js v7.5.0 path模块功能介绍(以下demo均来自官网),个人认为比较常用的两个方法join和normalize已标红

path模块提供的功能:https://nodejs.org/dist/latest-v7.x/docs/api/path.html

path模块提供了关于文件和文件目录的一些用法,引入path模块即可。

//引入path模块

const path = require('path');

path操作的返回结果会因操作系统的不同而有所不同。例如:

path.basename('C:\\temp\\myfile.html');

//POSIX系统下,返回:'C:\\temp\\myfile.html'

//windows系统下,返回:'myfile.html'

为了得到一致的结果可以使用path.win32 

插入十三、path.win32  提供windows下,下述方法的访问.

path.win32.basename('C:\\temp\\myfile.html');     //两个系统下均返回 'myfile.html'

注:Windows下斜杠(/)和反斜杠(\)都是允许作为路径分隔符的,但是返回值中只有反斜杠(\)

一、path.basename(path[, ext]),类似UNIX系统下的basename命令,返回文件名

· path 字符串,路径

· ext 字符串,扩展名     如果path和ext不是字符串的形式会抛出TypeError的错误

· 返回值以字符串的形式

path.basename('/foo/bar/baz/asdf/quux.html')     //'quux.html'

path.basename('/foo/bar/baz/asdf/quux.html')     //'quux'

二、path.delimiter  提供不同系统下的分隔符。windows系统(;)和posix(:)系统分隔符不同

POSIX下:

console.log(process.env.PATH);

//'usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin'

process.env.PATH.split(path.delimiter)

//['/usr/bin', '/bin', '/usr/sbin', '/sbin', '/usr/local/bin']

Window下:

console.log(process.env.PATH)

//'C:\Windows\system32;C:\Windows;C:\Program Files\node\'

process.env.PATH.split(path.delimiter)

//['C:\\Windows\\system32', 'C:\\Windows', 'C:\\Program Files\\node\\']

插入十二、path.sep 返回各平台的分隔符(Windows\,POSIX/)

POSIX下:

'foo/bar/baz'.split(path.sep);

//返回:['foo','bar','baz']

Windows下:

'foo\\bar\\baz'.split(path.sep)

//返回:['foo','bar','baz']

三、path.dirname(path)     返回文件所在路径名

path.dirname('/foo/bar/baz/asdf/quux');

//'/foo/bar/baz/asdf/'

四、path.extname(path)     返回拓展名。按照出现的最后一个点来划分,如果没有.或者路径是以.开头的就返回一个空字符串,如果最后一个刚好是.就返回.

path.extname('index.html')           //'.html'

path.extname('index.coffee.md')      //'.md'

path.extname('index.')               //'.'

path.extname('index')                //''

path.extname('.index')               //''

五、path.format(pathObject)     将对象形式的路径转为字符串形式的,与path.parse()相反

· pathObject     对象 包括:dir, root, base, name, ext

这几种属性有优先级需要注意:

· 有dir忽略root

· 有base忽略name和ext

POSIX:

//1、dir, root, base都提供了,忽略root,返回dir和base拼出的路径

path.format({

     root: '/ignored',

     dir:  '/home/user/dir',

     base: 'file.txt'

})

//返回: /home/user/dir/file.txt

//2、没有dir有root,则用root。如果只提供了root或者root等于dir则忽略拓展名

path.format({

  root: '/',

  base: 'file.txt',

  ext: 'ignored'

})

//返回 '/file.txt'

//3、如果没有base,返回root+name+ext

path.format({

  root: '/',

  name: 'file',

  ext: '.txt'

})

//返回 '/file.txt'

Windows:

path.format({

     dir : "C:\\path\\dir",

     base : "file.txt"

});

//返回 'C:\\path\\dir\\file.txt'

五、path.isAbsolute(path)     判断是否是绝对路径,返回布尔值

POSIX:

path.isAbsolute('/foo/bar') // true
path.isAbsolute('/baz/..')  // true
path.isAbsolute('qux/')    // false
path.isAbsolute('.')        // false

Windows:

path.isAbsolute('//server') // true

path.isAbsolute('\\\\server') // true

path.isAbsolute('C:/foo/..') // true

path.isAbsolute('C:\\foo\\..') // true

path.isAbsolute('bar\\baz') // false

path.isAbsolute('bar/baz') // false

path.isAbsolute('.') // false

六、path.normalize(path)     路径格式化

1、规范..和.   ..及..前的那个和后面的所有都会被去掉 

2、//和\\ 在POSIX中 //规范成/ ;在Windows中\\不变,,\\\\会被规范成\\

POSIX:

path.normalize('/foo/bar//baz/asdf/quux/..')

//返回 '/foo/bar/baz/asdf'

Windows中:

path.normalize('C:\\temp\\\\foo\\bar\\..\\')

//返回 'C:\\temp\\foo\\'

七、path.join([...paths]) 连接路径,会自动对连接好的路径格式化

如果字符串长度是0,则会返回.代表当前工作路径

path.join('/foo', 'bar', 'baz/asdf', 'quux', '..')

//返回 '/foo/bar/baz/asdf'

path.join('foo', {}, 'bar')

//抛出TypeError错误,参数必须是字符串,不能是对象等其他的

八、path.parse(path)  将字符串格式的转化为对象格式的,是path.format(pathObject)的逆过程。

POSIX:

path.parse('/home/user/dir/file.txt')

//返回

//{

//   root: '/',

//   dir: '/home/user/dir',

//   base: 'file.txt',

//   ext: '.txt',

//   name: 'file'

//}

感觉下图更加形象,很好理解

┌─────────────────────┬────────────┐
│          dir        │    base    │
├──────┬              ├──────┬─────┤
│ root │              │ name │ ext │
"  /    home/user/dir / file  .txt "
└──────┴──────────────┴──────┴─────┘

Windows:

path.parse('C:\\path\\dir\\file.txt')

//返回

// {

//    root : "C:\\",

//    dir : "C:\\path\\dir",

//    base : "file.txt",

//    ext : ".txt",

//    name : "file"

// }

┌─────────────────────┬────────────┐
│          dir        │    base    │
├──────┬              ├──────┬─────┤
│ root │              │ name │ ext │
" C:\     path\dir    \ file  .txt "
└──────┴──────────────┴──────┴─────┘

九、path.posix  是path方法的一个特殊应用,提通过path.posix访问POSIX

十、path.relative(from, to)     提取from和to的公共部分,将to解析为相对路径,如果from和to一样,返回空字符串。

POSIX:

path.relative('/data/orandea/test/aaa', '/data/orandea/impl/bbb')

//返回  '../../impl/bbb'

Windows:

path.relative('C:\\orandea\\test\\aaa', 'C:\\orandea\\impl\\bbb')

//返回 '..\\..\\impl\\bbb'

十一、path.resolve([...paths]) 将最后一个参数转成绝对路径,从右往左,依次在前面加上路径,知道一个绝对路径构成就不再在前面加了。返回的路径是规范化以后的,空的路径参数会被忽略,如果没传参数,返回当前工作路径。如果所有参数都用上了还没返回绝对路径,就要加上当前的工作路径。

path.resolve('/foo', '/bar' ,'baz');               //返回:'/bar/baz'

path.resolve('/foo/bar','/tmp/file/');             //返回: '/tmp/file'     结尾/被删除了

path.resolve('/foo/bar', './baz');                 //返回: '/foo/bar/baz'

path.resolve('wwroot','static_files/png/','../gif/image.gif')     //如果当前的工作目录是 /home/myself/node 返回: '/home/myself/node/wwwroot/static_files/image.gif'


本文由职坐标整理并发布,希望对同学们有所帮助。了解更多详情请关注WEB前端Node.js频道!

本文由 @沉沙 发布于职坐标。未经许可,禁止转载。
喜欢 | 0 不喜欢 | 0
看完这篇文章有何感觉?已经有0人表态,0%的人喜欢 快给朋友分享吧~
评论(0)
后参与评论

您输入的评论内容中包含违禁敏感词

我知道了

助您圆梦职场 匹配合适岗位
验证码手机号,获得海同独家IT培训资料
选择就业方向:
人工智能物联网
大数据开发/分析
人工智能Python
Java全栈开发
WEB前端+H5

请输入正确的手机号码

请输入正确的验证码

获取验证码

您今天的短信下发次数太多了,明天再试试吧!

提交

我们会在第一时间安排职业规划师联系您!

您也可以联系我们的职业规划师咨询:

小职老师的微信号:z_zhizuobiao
小职老师的微信号:z_zhizuobiao

版权所有 职坐标-一站式IT培训就业服务领导者 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
 沪公网安备 31011502005948号    

©2015 www.zhizuobiao.com All Rights Reserved

208小时内训课程