6.node中常用的path模块

path模块

  • 获取 路规范化路径/路径/文件名/扩展名
    • path.normalize(filepath)
    • path.dirname(filepath)
    • path.basename(filepath)
    • path.extname(filepath)
  • 路径组合
    • path.join([…paths])
    • path.resolve([…paths])
  • 获取相对路径
    • path.relative(from参照, to)
  • 将对象转成字符串路径
    • path.format(pathObject)
  • 将字符串路径转成对象
    • path.parse(pathStr)
  • 获取当前平台的路径的分隔符,win是’;’, POSIX是’:’
    • path.delimiter
  • 判断是否为绝对路径,返回布尔值
    • path.isAbsolute(pathStr)
  • 获取当前平台分隔符,win是’’, POSIX是’/’
    • path.sep
  • 跨平台的path方法
    • path.posix 返回兼容多平台的path模块
  • win上的path方法
    • path.win32 返回win平台的path模块

path.normalize(filepath)

获取规范化路径

  • 主要规范以下几点:
  1. 单个’.’ + 路径分隔符开头的路径 会规范化为 去掉这个开头的路径
  2. 路径分隔符后面加’./’ 规范化去掉 ‘./’;路径分隔符后面加’…/’ 规范化 去掉前面一级
  3. 连续多个路径分隔符,无论分隔符是win的,还是POSIX的,还是win和POSIX混用的,都将转成一个当前平台的路径分隔符
  4. 结尾的分隔符保留
  5. 参数为长度为0的字符串,则返回’.’,表示当前工作目录
  6. 输入的不是字符串,报错
// 在win上
console.log(1, path.normalize('a/b')) // a\b
console.log(1, path.normalize('./a/b')) // a\b
console.log(1, path.normalize('../a\\\\\//b')) // ..\a\b
console.log(1, path.normalize('.../a/b')) // ...\a\b
console.log(1, path.normalize('...../a/b')) // .....\a\b
console.log(1, path.normalize('a/b\\\\')) // a\b\
console.log(1, path.normalize('...../a./b')) // .....\a.\b
console.log(1, path.normalize('')) // .
console.log(1, path.normalize( ./a/../b/.\c)) // b\c

path.dirname(filepath)

获取当前路径的父路径(取父级)

  • 无论当前路径是文件还是文件夹,都取父级
  • 取父级取到顶了,就返回’.’
  • 如果结果是’./‘或’…/‘都写成’.‘或’…’
// 在win上
console.log(path.dirname('a/b/c.txt')) // a/b
console.log(path.dirname('a/b/c')) // a/b
console.log(path.dirname('.')); // .
console.log(path.dirname('./')); // .
console.log(path.dirname('./a')); // .
console.log(path.dirname('./a/b')); // ./a
console.log(path.dirname('./a/b/c.txt')); // ./a/b
console.log(path.dirname('..')); // .
console.log(path.dirname('../')); // .
console.log(path.dirname('../a')); // ..
console.log(path.dirname('../a/b')); // ../a
console.log(path.dirname('../a/b/c.txt')); // ../a/b

path.basename(filepath)

取路径的最后一段

console.log(path.basename('a/b/c.txt')) // c.txt
console.log(path.basename('a/b/c')) // c
console.log(path.basename('.')); // .
console.log(path.basename('./')); // .
console.log(path.basename('..')); // ..
console.log(path.basename('../')); // ..

path.extname(filepath)

取路径的扩展名,取不到就返回空字符串

console.log(path.extname('a/b/c.txt')) // .txt
console.log(path.extname('a/b/c')) // 空字符串
console.log(path.extname('.')) // 空字符串
console.log(path.extname('./')) // 空字符串
console.log(path.extname('..')) // 空字符串
console.log(path.extname('../')) // 空字符串

path.join([…paths])

路径拼接,然后normalize规范化

console.log('a', './b') // a\b
console.log(path.join('./a', './b', '.\\\c')); // a/b/c
console.log(path.join('./a', '../b', '.\\\c')); // b\c

path.resolve([…paths])

理解成cd path0, cd path1, cd path2

  • 如果是路径是空字符串,则相当于cd .,也就是cd ./

path.relative(from参照, to)

获取相对路径,即当前在from参照,要怎么cdto

var p1 = path.relative('/data/a/test/aaa', '/data/a/impl/bbb');
console.log(p1);  // 输出 "../../impl/bbb"

path.format(pathObject)

将一个对象,转成字符串路径

  • 对象属性:
    • dir 所在目录,提供了 pathObject.dir,则 pathObject.root 会被忽略
    • root 根目录
    • base 文件全名。如果pathObject.base 存在,则 pathObject.ext 和 pathObject.name 会被忽略
    • name 文件名字(不带后缀)
    • ext 文件后缀
path.format({
  dir: '/home/user/dir',
  base: 'file.txt'
});
// 结果: /home/user/dir/file.txt

path.format({
  root: '/',
  name: 'file',
  ext: '.txt'
});
// 返回: '/file.txt'

path.parse(pathStr)

将字符串路径转成对象

let pathObj = path.parse('/users/home/article/a.txt');
console.dir(pathObj);

// 输出如下
{ root: '/',
  dir: '/users/home/article',
  base: 'a.txt',
  ext: '.txt',
  name: 'a' }

path.isAbsolute(pathStr)

  • 判断是否为绝对路径,返回布尔值

跨平台属性path.delimiter

获取当前平台的路径的分隔符,win是’;’, POSIX是’:’

// win下
console.log(process.env.PATH) // C:\Program Files\Git\mingw64\bin;C:\Program Files\Git\usr\bin;C:\Users\yuhua7\bin
console.log(process.env.PATH.split(path.delimiter)) // ['C:\\Program Files\\Git\\mingw64\\bin','C:\\Program Files\\Git\\usr\\bin','C:\\Users\\yuhua7\\bin']

跨平台属性path.sep

获取当前平台分隔符,win是’’, POSIX是’/'

// linux下:
'foo/bar/baz'.split(path.sep)
// 返回['foo', 'bar', 'baz']
 
// win下
'foo\\bar\\baz'.split(path.sep)
// 返回['foo', 'bar', 'baz']

跨平台属性path.posix

path.posix 返回兼容多平台的path模块, path.posix拥有path下所有的属性方法

console.log(path.posix.join(__dirname, './a.txt')) // C:\Users\yuhua7\Desktop\node\nodejs复习笔记/a.txt
console.log(path.posix.normalize('./a\\s\d')) // a\sd
  • win上的path方法
    • path.win32 返回win平台的path模块, path.win32拥有path下所有的属性方法
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值