nodejs之path篇

331 阅读4分钟

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/'))
结果:
  1. 如果路径中包含多层后缀名,返回的是最后一个点之后的内容
console.log(path.extname('/a/b/c.html.js.css'));
结果: .css
console.log(path.extname('/a/b/c.html.js.'));
结果:.

path.parse()解析路径

  1. 作用:将接收到的路径进行解析返回一个路径对象,包含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'      
  }

  1. 如果传入路径不带扩展名,返回的对象键不变,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' }
  1. 如果传入路径最后结束为/,则忽略/
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() 拼接路径

  1. 作用:利用分隔符拼接给定的路径
console.log(path.join('a/b','c','index.html'))
结果:a/b/c/index.html
  1. 只接受字符串作为参数
  2. 如果给定片段是空则忽略
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()

  1. path.resolve() 方法将路径或路径片段的序列解析为绝对路径。

  2. 给定的路径序列从右到左处理,每个后续的path会被追加到前面,直到构建绝对路径。 例如,给定路径片段的序列:/foo、/bar、baz,调用 path.resolve('/foo', '/bar', 'baz') 将返回 /bar/baz,因为 'baz' 不是绝对路径,而 '/bar' + '/' + 'baz' 是。

  3. 如果在处理完所有给定的path片段之后,还没有生成绝对路径,则使用当前工作目录。

  4. 生成的路径被规范化,并删除尾部斜杠(除非路径解析为根目录)。

  5. 零长度的 path 片段被忽略

  6. 如果没有传入 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'