node 中 path 模块的使用

usage of path module in node

node 中 path 模块的使用

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

const path = require('path');

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

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

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

path.basename(path[, ext])

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

> path.basename('E:/hxhen/index.html')  // 常规用法,取下以路径分隔符分隔的最后一个元素
'index.html'
> path.basename('E:/hxhen/index.html', '.html')  // 使用可选参数可以将后缀去除
'index'

// 下面是对可选参数的非常规测试
> path.basename('E:/hxhen/index.html', 'html')
'index.'
> path.basename('E:/hxhen/index.html', 'ml')
'index.ht'
> path.basename('E:/hxhen/index.html', '.ht')
'index.html'
> path.basename('E:/hxhen/index.html', 'xyz')
'index.html'
// 可以发现,这个函数会把输入的可选参数和path这个参数从末尾开始匹配,把匹配到的连续字符串删除。

path.dirname(path)

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

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

path.extname(path)

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

> path.extname('E:/hxhen/index.html')  //常规情况
'.html'

// 它同时也考虑到了一些特殊情况
> path.extname('E:/hxhen/hxhen.index.html')  // 文件名包含点(.)
'.html'
> path.extname('E:/hxhen/.index.html')  // 隐藏文件
'.html'
> path.extname('E:/hxhen/index.')  // 后缀不完整
'.'
> path.extname('E:/hxhen/index')  // 没有后缀
''
> path.extname('E:/hxhen/.html')  // 只有后缀
''

// 把它和 path.basename() 结合简直不要太方便
> p = 'E:/hxhen/index.html'
> path.basename(p, path.extname(p))  // 妈妈再也不用担心我懒得找后缀名了~
'index'

path.isAbsolute(path)

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

> path.isAbsolute('E:/hxhen/index.html')
true
> path.isAbsolute('./hxhen/index.html')
false
> path.isAbsolute('../hxhen/index.html')
false

path.join([…paths])

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

> path.join('E:', 'hxhen', 'index.html')  // 常规情况。我在 Windows 平台测试,它很贴心地使用了双斜杆
'E:\\hxhen\\index.html'

// 自己加上的斜杆会被忽略,不用担心重复问题
> path.join('E:', 'hxhen\\', 'index.html')
'E:\\hxhen\\index.html'
> path.join('E:', '\\hxhen', 'index.html')
'E:\\hxhen\\index.html'
> path.join('E:', 'hxhen/', 'index.html')
'E:\\hxhen\\index.html'
> path.join('E:', '/hxhen', 'index.html')
'E:\\hxhen\\index.html'

// 参数说明是一个数组的形式,但别真的传一个数组进去作参数
> path.join(['E', 'hxhen', 'index.html'])  // 它会丝毫不留情面地报错
TypeError [ERR_INVALID_ARG_TYPE]: The "path" argument must be of type string. Received type object
    at validateString (internal/validators.js:125:11)
    at Object.join (path.js:427:7)

path.normalize(path)

它可以帮你把路径规范化

> path.normalize('E:\\hxhen\\\\src\\html\\..\\')
'E:\\hxhen\\src\\'
> path.normalize('E:////hxhen\\\\/\\/\\/src/html/')
'E:\\hxhen\\src\\html\\'

path.parse(path)

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

  • dir
  • root
  • base
  • name
  • ext
> path.parse('E:/hxhen/src/index.html')
{ root: 'E:/',
  dir: 'E:/hxhen/src',
  base: 'index.html',
  ext: '.html',
  name: 'index' }
> path.parse('E:\\hxhen\\src\\index.html')
{ root: 'E:\\',
  dir: 'E:\\hxhen\\src',
  base: 'index.html',
  ext: '.html',
  name: 'index' }  // 操作对象就很方便了

path.format(pathObject)

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

> pathObj = { root: 'E:\\',
...   dir: 'E:\\hxhen\\src',
...   base: 'index.html',
...   ext: '.html',
...   name: 'index' }
> path.format(pathObj)
'E:\\hxhen\\src\\index.html'

path.resolve([…paths])

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

> path.resolve()
'E:\\'
> path.resolve('E:\\', 'hxhen', 'index.html')
'E:\\hxhen\\index.html'
> path.resolve('..\\', 'hxhen', 'index.html')
'E:\\hxhen\\index.html'
> path.resolve('src\\', 'hxhen', 'index.html')
'E:\\src\\hxhen\\index.html'

path.relative(from, to)

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

> path.relative('E:\\hxhen\\src\\index.html', 'E:\\hxhen')
'..\\..'
> path.relative('E:\\hxhen', 'E:\\hxhen\\src\\index.html')
'src\\index.html'
> path.relative('E:\\hxhen\\src\\index.html', 'E:\\hxhen\\css\\main.css')
'..\\..\\css\\main.css'

发表评论

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