node 中 path 模块的使用

usage of path module in node

node 中 path 模块的使用

想要使用这个模块,首先就需要引入这个模块,如下代码:

1const path = require('path');

引入模块之后就可以使用模块里的方法了,方法不少,这里记录了下面这些方法:

  • basename
  • dirname
  • extname
  • isAbsolute
  • join
  • normalize
  • format
  • parse
  • resolve
  • relative

下面依次聊一聊各个方法的使用

path.basename(path[, ext])

这个方法用来返回文件名,可以选择除去后缀。它虽然有两个参数,但功能很朴实。需要关注的就是 后缀(ext) 这个可选参数

 1> path.basename('E:/hxhen/index.html')  // 常规用法,取下以路径分隔符分隔的最后一个元素
 2'index.html'
 3> path.basename('E:/hxhen/index.html''.html')  // 使用可选参数可以将后缀去除
 4'index'
 5
 6// 下面是对可选参数的非常规测试
 7> path.basename('E:/hxhen/index.html''html')
 8'index.'
 9> path.basename('E:/hxhen/index.html''ml')
10'index.ht'
11> path.basename('E:/hxhen/index.html''.ht')
12'index.html'
13> path.basename('E:/hxhen/index.html''xyz')
14'index.html'
15// 可以发现,这个函数会把输入的可选参数和path这个参数从末尾开始匹配,把匹配到的连续字符串删除。

path.dirname(path)

这个方法用来返回文件所在的文件夹路径,见名知义

1> path.dirname('E:/hxhen/index.html')
2'E:/hxhen'

path.extname(path)

这个方法用来返回文件的后缀(拓展名)

 1> path.extname('E:/hxhen/index.html')  //常规情况
 2'.html'
 3
 4// 它同时也考虑到了一些特殊情况
 5> path.extname('E:/hxhen/hxhen.index.html')  // 文件名包含点(.)
 6'.html'
 7> path.extname('E:/hxhen/.index.html')  // 隐藏文件
 8'.html'
 9> path.extname('E:/hxhen/index.')  // 后缀不完整
10'.'
11> path.extname('E:/hxhen/index')  // 没有后缀
12''
13> path.extname('E:/hxhen/.html')  // 只有后缀
14''
15
16// 把它和 path.basename() 结合简直不要太方便
17> p = 'E:/hxhen/index.html'
18> path.basename(p, path.extname(p))  // 妈妈再也不用担心我懒得找后缀名了~
19'index'

path.isAbsolute(path)

可以用这个方法来确定一个路径是不是绝对路径

1> path.isAbsolute('E:/hxhen/index.html')
2true
3> path.isAbsolute('./hxhen/index.html')
4false
5> path.isAbsolute('../hxhen/index.html')
6false

path.join([…paths])

用它来拼接路径字符串,比如

 1> path.join('E:''hxhen''index.html')  // 常规情况。我在 Windows 平台测试,它很贴心地使用了双斜杆
 2'E:\\hxhen\\index.html'
 3
 4// 自己加上的斜杆会被忽略,不用担心重复问题
 5> path.join('E:''hxhen\\''index.html')
 6'E:\\hxhen\\index.html'
 7> path.join('E:''\\hxhen''index.html')
 8'E:\\hxhen\\index.html'
 9> path.join('E:''hxhen/''index.html')
10'E:\\hxhen\\index.html'
11> path.join('E:''/hxhen''index.html')
12'E:\\hxhen\\index.html'
13
14// 参数说明是一个数组的形式,但别真的传一个数组进去作参数
15> path.join(['E''hxhen''index.html'])  // 它会丝毫不留情面地报错
16TypeError [ERR_INVALID_ARG_TYPE]: The "path" argument must be of type string. Received type object
17    at validateString (internal/validators.js:125:11)
18    at Object.join (path.js:427:7)

path.normalize(path)

它可以帮你把路径规范化

1> path.normalize('E:\\hxhen\\\\src\\html\\..\\')
2'E:\\hxhen\\src\\'
3> path.normalize('E:////hxhen\\\\/\\/\\/src/html/')
4'E:\\hxhen\\src\\html\\'

path.parse(path)

这个方法会将路径字符串转换成一个对象,这个对象将包含下面这些信息

  • dir
  • root
  • base
  • name
  • ext
 1> path.parse('E:/hxhen/src/index.html')
 2root'E:/',
 3  dir'E:/hxhen/src',
 4  base'index.html',
 5  ext'.html',
 6  name'index' }
 7> path.parse('E:\\hxhen\\src\\index.html')
 8root'E:\\',
 9  dir'E:\\hxhen\\src',
10  base'index.html',
11  ext'.html',
12  name'index' }  // 操作对象就很方便了

path.format(pathObject)

这个方法和上一个方法相反,它会把一个存储着路径的对象转换成字符串形式的路径

1> pathObj = { root'E:\\',
2...   dir: 'E:\\hxhen\\src',
3...   base: 'index.html',
4...   ext: '.html',
5...   name: 'index' }
6> path.format(pathObj)
7'E:\\hxhen\\src\\index.html'

path.resolve([…paths])

这个方法会从右到左检索根目录,将找到的第一个根目录和它后面的所有路径拼接起来。如果找不到根目录,那就以当前的路径作为根目录返回。如果参数为空,返回当前路径

1> path.resolve()
2'E:\\'
3> path.resolve('E:\\''hxhen''index.html')
4'E:\\hxhen\\index.html'
5> path.resolve('..\\''hxhen''index.html')
6'E:\\hxhen\\index.html'
7> path.resolve('src\\''hxhen''index.html')
8'E:\\src\\hxhen\\index.html'

path.relative(from, to)

返回路径 from 相对于 to 的路径字符串

1> path.relative('E:\\hxhen\\src\\index.html''E:\\hxhen')
2'..\\..'
3> path.relative('E:\\hxhen''E:\\hxhen\\src\\index.html')
4'src\\index.html'
5> path.relative('E:\\hxhen\\src\\index.html''E:\\hxhen\\css\\main.css')
6'..\\..\\css\\main.css'

发表评论

电子邮件地址不会被公开。 必填项已用*标注