使用path模块需要导入,const path = require('path')
一、获取路径/文件名/文件扩展名
- 获取路径:path.dirname(fpath)
- 获取文件名: path.basename(fpath)
- 获取文件扩展名: path.extname(fpath)
- 获取文件所在文件夹绝对路径:__dirname
- 获取文件所在绝对路径: __filename
获取路径
可以理解为,获取的是最后一个斜杠前面的部分
ini
const path = require('path')
const fpath = '/aaa/bbb/ccc.js'
// 输出:/aaa/bbb
console.log( path.dirname(fpath) );
获取文件名
可以理解为,获取的是最后一个斜杠后面的部分
javascript
const path = require('path');
// 输出:ccc.js
console.log( path.basename('/aaa/bbb/ccc.js') );
// 输出:ccc.js.md
console.log( path.basename('/aaa/bbb/ccc.js.md') );
// 输出:ccc
console.log( path.basename('/aaa/bbb/ccc') );
可以传入第二个参数,来忽略后缀
arduino
// 输出:ccc.js
console.log( path.basename('/aaa/bbb/ccc.js.md', '.md' ) );
// 输出:ccc.j
console.log( path.basename('/aaa/bbb/ccc.js.md', 's.md' ) );
获取文件扩展名
获取最后一个.
后的所有内容,如果不存在.
或者只有一个.
并且是字符串第一个字符,则返回空字符串
arduino
// 输出:.js
console.log( path.extname('/aaa/bbb/ccc.js') );
// 输出:.md
console.log( path.extname('/aaa/bbb/ccc.js.md') );
// 输出:.b
console.log( path.extname('.a.b') );
// 输出:
console.log( path.extname('.a') );
// 输出:
console.log( path.extname('/aaa') );
二、路径格式化
path.normalize(filepath)
这个api主要的功能,是为了去掉路径中重复的路径分隔符,具体有以下功能:
- 去掉重复的路径分隔符
- 模拟'.','..'功能
- 路径最后有
/
,那么保留该/
- 路径为空,返回
.
less
const path = require('path')
// 输出 '.'
console.log( path.normalize('') );
// 输出 /a/b/c
console.log( path.normalize('/a/b/c') );
// 输出 /a/b/c/
console.log( path.normalize('/a/b/c/') );
// 输出 /a/b/c
console.log( path.normalize('////a/////b//c') );
// 输出 /a/b/c
console.log( path.normalize('/a/b/c/d/..') );
// .与..
// 输出 ..
console.log( path.normalize('./..') );
// 输出 ..
console.log( path.normalize('..') );
// 输出 ../
console.log( path.normalize('../') );
// 输出 /
console.log( path.normalize('/../') );
// 输出 /
console.log( path.normalize('/..') );
三、路径拼接
path.join([...paths])
用路径分隔符把数组用的每一项拼接,再调用上面的normalize
方法
javascript
const path = require('path')
// 输出 a/b/c/d/e
console.log(path.join('/a', 'b', 'c/d', 'e'));
// 输出 a/c/d/e
console.log(path.join('/a', 'b', '../c/d', 'e'));
path.resolve([...paths])
把数组的每一项执行 cd path
,就是最终的结果
javascript
const path = require('path')
// 输出 当前所在目录的绝对路径
console.log( path.resolve('') )
// 输出 当前所在目录的绝对路径
console.log( path.resolve('.') )
// 输出 /a/b/c
console.log( path.resolve('/a/b', './c') );
// 输出 /c
console.log( path.resolve('/a/b', '/c') );
// 输出 当前所在目录的绝对路径/a/b/d
console.log( path.resolve('a', 'b/c', '../d') );
解释一下path.resolve('/a/b', './c')
- cd
/a/b
- cd
./c
- 得到 /a/b/c
解释一下path.resolve('a', 'b/c', '../d')
- cd
a
,注意没有/
,所以是在当前所在绝对路径中进入a - cd
b/c
,进入b再进入c - cd
../d
,../
返回上一层,相当于b,再进入d - 得到 绝对路径/a/b/d
四、路径分解/组合
path.format(pathObject)
将pathObject的root、dir、base、name、ext
属性,按照一定的规则,组合成一个文件路径。
path.parse(filepath)
path.format()方法的反向操作,把路径分割为pathObject
什么是pathObject?
pathObject就是用root、dir、base、name、ext
这几个属性代表字符串路径
看不同系统平台下对于pathObject的相互转换
css
linux:/root/a/b/c.txt
{
root: "/",
dir: "/a/b",
base: "c.txt",
name: "c",
ext: "txt"
}
vbnet
windows: C:\a\b\c.txt
{
root: "C:\",
dir: "\a\b",
base: "c.txt",
name: "c",
ext: "txt"
}
五、 获取相对路径
path.relative(from, to)
- 官方点的解释:返回从
form
到to
的相对路径 - 白话解释:从
from
到to
,通过cd xxxxx
可以直接到达,返回xxxxx
特殊情况
- 如果
from
、to
指向同个路径,那么,返回空字符串。
lua
const path = require('path');
// 输出 "../..//f"
console.log( path.relative('/a/b/c/d', '/a/b/e/f') );
// 输出 ""
console.log( path.relative('/a/b', '/a/b') );
// ''代表当前所在目录的绝对路径
// 输出 ../../当前所在目录的绝对路径
console.log( path.relative('/a/b', '') );
// 输出 多个../直到回到根目录/a/b
console.log( path.relative('', '/a/b') );
平台相关接口/属性
path.sep
路径分隔符。在linux上是/
,在windows上是``
path.delimiter
path设置的分割符。linux上是:
,windows上是;
path.posix
path相关属性、接口的linux实现
path.win32
path相关属性、接口的win32实现