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')
2{ root: 'E:/',
3 dir: 'E:/hxhen/src',
4 base: 'index.html',
5 ext: '.html',
6 name: 'index' }
7> path.parse('E:\\hxhen\\src\\index.html')
8{ root: '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'