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)
获取规范化路径
- 主要规范以下几点:
- 单个’.’ + 路径分隔符开头的路径 会规范化为 去掉这个开头的路径
- 路径分隔符后面加’./’ 规范化去掉 ‘./’;路径分隔符后面加’…/’ 规范化 去掉前面一级
- 连续多个路径分隔符,无论分隔符是win的,还是POSIX的,还是win和POSIX混用的,都将转成一个当前平台的路径分隔符
- 结尾的分隔符保留
- 参数为长度为0的字符串,则返回’.’,表示当前工作目录
- 输入的不是字符串,报错
// 在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参照
,要怎么cd
到to
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下所有的属性方法