来源:Node.js

path模块在不同的操作系统中具有差异

posix

全名Portable Operating System Interface of UNIX

posix表示可移植操作系统接口,它定义了一套标准,遵守这套标准的操作系统有Unix、like Unix、Linux、MacOS、Windows WSL

在Linux系统启动一个进程需要调用fork函数、在Windows启动一个进程需要调用creatprocess函数,这样就会产生问题:在Linux写好的代码需要移植到Windows,结果发现函数不统一,posix标准就是为了解决这个问题

Windows并没有完全遵循posix标准,它在设计上采用了不同于posix的路径表示方法

在Windows 系统中,使用反斜杠\作路径分隔符,这与 POSIX 系统使用的正斜杠/是不同的;这是Windows系统的历史原因,早期的Windows操作系统采用了不同的设计选择

path

path.basename

path.basename()方法返回给定路径中的最后一部分,也就是文件名

在遵循posix的OS中处理Windows路径:

1
2
path.basename('C:\temp\myfile.html')
// -> 'C:\temp\myfile.html'

这个结果并不对,应该返回myfile.html

如果要在遵循posix的OS中正确处理Windows路径,需要调用对应操作系统的方法,所以应该修改为:

1
2
path.win32.basename('C:\temp\myfile.html')
// -> 'myfile.html'

path.dirname

path.dirname()方法和basename正好互补,返回不包含文件名的目录名

1
2
path.dirname('/aaaa/bbbb/cccc/index.html')
// -> '/aaaa/bbbb/cccc'

path.extname

path.extname()方法返回扩展名,没有扩展名就返回空

1
2
path.extname('/aaaa/bbbb/cccc/index.html.ccc.ddd.aaa')
// -> '.aaa'

path.join

path.join()方法用于拼接路径,也支持..'./'../操作符

1
2
path.join('/foo','/cxk','/ikun','../')
// -> '/foo/cxk/'

path.resolve

path.resolve()解析相对路径并返回绝对路径

1
2
3
4
5
6
7
8
9
10
11
// 如果传入了多个绝对路径,返回最右边的绝对路径
path.resolve('/aaa','/bbb','/ccc')
// -> '/ccc'

// 传入绝对路径+相对路径
path.resolve(__dirname,'./index.js')
// -> '/User/xiaoman/DeskTop/node/index.js'

// 只传入相对路径
path.resolve('./index.js')
// -> `${工作目录}/index.js`

path.parse

path.parse()解析文件路径,接收一个路径字符串参数、返回一个包含路径各个组成成分的对象

1
2
3
4
5
6
7
8
9
path.parse('/home/user/dir/file.txt')

// -> {
// root: '/',
// dir: '/home/user/dir',
// base: 'file.txt',
// ext: '.txt',
// name: 'file'
// }
  • root:路径的根目录
  • dir:文件所在的目录
  • base:文件名
  • ext:文件扩展名
  • name:文件名去除扩展名

path.format

path.format()path.parse()正好相反,它将对象转回路径字符串

1
2
3
4
5
6
7
8
9
path.format({
root: '/',
dir: '/home/user/documents',
base: 'file.txt',
ext: '.txt',
name: 'file'
})

// -> '/home/user/dir/file.txt'