path
path是nodejs的内置模块,直接require之后可以直接使用。主要处理文件、目录的路径,比如说获取文件后缀名、路径拼接等。
常见API有:
- basename():获取路径中基础名称
- dirname(): 获取路径中目录名称
- extname():获取文件扩展名
- isAbsolute():获取路径是否为绝对路径
- join():拼接多个路径片段
- resolve():返回绝对路径
- parse():解析路径
- format():序列化路径
- normalize(): 规范化路径
path.basename(path[, ext])返回路径中最后一部分
1、作用:获取路径中的基础名称,或者说返回路径中最后一部分
const path = require('path')
console.log(__filename) //返回结果为:D/学习/前端学习/index.html
console.log(path.basename(__filename)) //返回index.html
console.log(path.basename('D/学习/前端学习/index.html')) //返回index.html
结果为:index.html
2、第二个参数扩展名是可选参数,如果path能匹配到扩展名,则返回时不带扩展名,若匹配不到则忽略此参数
console.log(path.basename('D/学习/前端学习/index.html','.html'))
结果为:index
console.log(path.basename('D/学习/前端学习/index.html','.js'))
结果为:index.html
3、ext参数区分大小写
console.log(path.basename('D/学习/前端学习/index.html','.HTML'))
结果为:index.html
4、两个参数都是字符串类型,否则会抛出错误
5、我们说path即可以操作文件也可以操作目录,如果结尾带路径分隔符则忽略,如果不带路径分隔符则返回最后一部分,无论是目录还是文件。
console.log(path.basename('D/学习/前端学习'))
结果为:前端学习
console.log(path.basename('D/学习/前端学习/'))
结果为:前端学习
path.dirname(path)获取路径名
1、作用:返回path中除最后一部分路径的上一层的信息(如果结尾是路径分隔符则忽略)
2、示例
console.log(path.dirname('/a/b/c/index.html'))
结果为:/a/b/c
console.log(path.dirname('/a/b/c'))
结果为:/a/b
console.log(path.dirname('/a/b/c/'))
结果为:/a/b
3、如果/之后没有内容会被忽略,其上一级路径才是最后一级路径
path.extname(path) 获取文件扩展名
1、作用:获取路径的扩展名,如果带后缀则返回后缀
console.log(path.extname(__filename))
结果:.js
2、如果是目录结构则输出空
console.log(path.extname('/a/b/c'))
结果:
console.log(path.extname('/a/b/c/'))
结果:
- 如果路径中包含多层后缀名,返回的是最后一个点之后的内容
console.log(path.extname('/a/b/c.html.js.css'));
结果: .css
console.log(path.extname('/a/b/c.html.js.'));
结果:.
path.parse()解析路径
- 作用:将接收到的路径进行解析返回一个路径对象,包含root、dir、base、ext、name
其中root代表根或者盘符、dir代表目录、base代表文件完整名称(包含文件名称name+后缀ext)、name文件名称、ext扩展名
const parseObj = path.parse('c:/a/b/c/index.html')
console.log(parseObj);
结果:{
root: 'c:',
dir: 'c:/a/b/c',
base: 'index.html',
ext: '.html',
name: 'index'
}
- 如果传入路径不带扩展名,返回的对象键不变,ext值为空
const parseObj1 = path.parse('c:/a/b/c/index')
console.log(parseObj1);
结果:
{ root: 'c:/', dir: 'c:/a/b/c', base: 'index', ext: '', name: 'index' }
- 如果传入路径最后结束为/,则忽略/
const parseObj2 = path.parse('c:/a/b/c/')
console.log(parseObj2);
结果:
{ root: 'c:/', dir: 'c:/a/b', base: 'c', ext: '', name: 'c' }
path.format()序列化路径
可以将我们解析后的路径进行拼接,利用dir+base,其中两者之间的路径分隔符取决于系统。
const parseObj = path.parse('c:/a/b/c/index.html')
console.log(parseObj);
console.log(path.format(parseObj))
结果:
{
root: 'c:/',
dir: 'c:/a/b/c',
base: 'index.html',
ext: '.html',
name: 'index'
}
c:/a/b/c\index.html
path.isAbsolute() 判断是否为绝对路径
console.log(path.isAbsolute('foo'))
console.log(path.isAbsolute('/foo'))
console.log(path.isAbsolute('////foo'))
console.log(path.isAbsolute('./foo'))
console.log(path.isAbsolute('../foo'))
console.log(path.isAbsolute('.'))
console.log(path.isAbsolute(''))
结果:
false
true
true
false
false
false
false
只有以/开头的会被认为绝对路径。其余返回的是相对路径
path.join() 拼接路径
- 作用:利用分隔符拼接给定的路径
console.log(path.join('a/b','c','index.html'))
结果:a/b/c/index.html
- 只接受字符串作为参数
- 如果给定片段是空则忽略
console.log(path.join('a/b','c','','index.html'))
console.log(path.join('a/b','c','.','index.html'))
console.log(path.join('a/b','c','./','index.html'))
console.log(path.join('a/b','c','../','index.html'))
结果分别是:
a/b/c/index.html
a/b/c/index.html
a/b/c/index.html
a/b/index.html
如果拼接路径中存在./或者../则按规则处理,比如返回上级目录后再拼接后面内容
path.resolve()
-
path.resolve() 方法将路径或路径片段的序列解析为绝对路径。
-
给定的路径序列从右到左处理,每个后续的path会被追加到前面,直到构建绝对路径。 例如,给定路径片段的序列:/foo、/bar、baz,调用 path.resolve('/foo', '/bar', 'baz') 将返回 /bar/baz,因为 'baz' 不是绝对路径,而 '/bar' + '/' + 'baz' 是。
-
如果在处理完所有给定的path片段之后,还没有生成绝对路径,则使用当前工作目录。
-
生成的路径被规范化,并删除尾部斜杠(除非路径解析为根目录)。
-
零长度的 path 片段被忽略
-
如果没有传入 path 片段,则 path.resolve() 将返回当前工作目录的绝对路径。
path.resolve('/foo/bar', './baz');
// 返回: '/foo/bar/baz'
path.resolve('/foo/bar', '/tmp/file/');
// 返回: '/tmp/file'
path.resolve('wwwroot', 'static_files/png/', '../gif/image.gif');
// 如果当前工作目录是 /home/myself/node,
// 则返回 '/home/myself/node/wwwroot/static_files/gif/image.gif'