node.js path相关方法

在搭建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’

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值