前言
这个模块包含处理和转换文件路径的一套工具集,这些方法的大部分主要用于字符串变换。不会调用文件系统去检验路径是否合法。
你只需要require('path')
即可使用这个模块,下面的这些方法是所被提供的:
1.path.basename(p[, ext])
返回一个路径中的最后一部分. 与Unix 的 basename 命令很相似。
第二个参数是可选项,只能传后缀名,如果未传则是情况一,会得到带后缀名的文件名;如果传了则是情况二,则会得到不带后缀名的文件名,
例:
1 | path.basename('/foo/bar/baz/asdf/quux.html') |
2.path.delimiter
特定平台的路径分隔符, ;
或者':'
.
*nix上的例子:
1 | console.log(process.env.PATH) |
Windows上的例子:
1 | console.log(process.env.PATH) |
3.path.dirname(p)
返回一个路径的文件夹名,相当于Unix中的dirname
命令。
例:
1 | path.dirname('/foo/bar/baz/asdf/quux') |
4.path.extname(p)
返回路径中文件的扩展名,在从路径最后一部分中的最后一个’.’到字符串的末尾。如果在路径的最后一部分没有’.’,或者第一个字符是’.’,就返回一个 空字符串。
例:
1 | path.extname('index.html') |
5.path.format(pathObject)
从一个路径对象中返回一个路径字符串,它刚好跟path.prase
相反。
如果pathObject
有dir
和base
属性,那么返回的字符串将会是dir
属性、所在平台的路径分隔符以及base
属性三者链接起来。
如果没有提供dir
属性,root
属性将会被当做dir
属性来用。然而,假设当root
属性以所依赖的平台分隔符所结束时,在这种情况下,返回的字符串将会是root
属性和base
属性的链接起来的字符串。
如果dir和root属性都没有被提供的话,那么返回的字符串将会是base属性的内容。
如果base属性没有被提供,那么base属性将会是name属性和ext(后缀名)属性的结合。
下面看几个官方实例就会很清楚了:
1 | // 当提供dir和base的时候,将会返回 `dir + platform separator + base` |
6.path.isAbsolute(path)
判断path是否是一个绝对路径,绝对路径经常会被用来处理同一个地址,不管是在哪一个目录下。
例:
1 | path.isAbsolute('/foo/bar') // true |
注意:如果这个路径字符串传一个长度为0的字符串,那么不像其他路径模块函数,它将会被照样输出,并返回一个false。
7.path.join([path1][, path2][, …])
连接所有的参数到一起并且格式化这个生成的路径,所以以后只要涉及到拼接路径字符串,就采用它,这样就不易出错了,你多写了/
它也会自动帮你处理掉,大大提高容错率。
这些参数必须是字符串的格式,在v0.8,不是字符串格式的参数会被默默地忽略掉。在v0.10以及以上,会抛出一个异常。
例:
1 | path.join('/foo', 'bar', 'baz/asdf', 'quux', '..') |
注意:如果这个参数添加一个长度为0的字符串,不像其他路径模块函数,它将会被忽略。如果连接的路径字符串是一个长度为0的字符串,接下来会返回一个代表自己当前的工作目录的路径。
这个API的一个重要的应用场景,是将相对路径转为绝对路径,通过path.join(__dirname,’相对路径’) => 就会将这个相对路径转为绝对路径,在某些场景下极为有用。
8.path.normalize(p)
规范规范化字符串路径,注意 ‘..’ 和 `’.’ 部分。
多个斜杠会被替换成一个;路径末尾的斜杠会被保留; Windows 系统上, 会使用反斜杠。
例:
1 | path.normalize('/foo/bar//baz/asdf/quux/..') |
注意:如果路径字符串中传入了一个长度为0的字符串,那么将会返回当前工作文件目录名。
9. path.parse(pathString)
从传入的一个路径字符串中返回一个对象。
例如在*nix上:
1 | path.parse('/home/user/dir/file.txt') |
在Windows上:
1 | path.parse('C:\\path\\dir\\index.html') |
类Unix系统不像Windows系统那样具有好几个盘符
10. path.posix
提供上述的路径方法,并且总是以posix兼容的方式进行交互。
POSIX 表示可移植操作系统接口(Portable Operating System Interface ,缩写为 POSIX ),POSIX标准定义了操作系统应该为应用程序提供的接口标准,是IEEE为要在各种UNIX操作系统上运行的软件而定义的一系列API标准的总称,其正式称呼为IEEE 1003,而国际标准名称为ISO/IEC 9945。
11. path.relative(from, to)
解决从from到to的相对路径。
有时候我们有两个绝对路径,我们需要从中找出相对目录的起源目录。这其实就是path.resolve的相反实现,我们可以看看是什么意思:
1 | path.resolve(from, path.relative(from, to)) == path.resolve(to) |
例:
1 | path.relative('C:\\orandea\\test\\aaa', 'C:\\orandea\\impl\\bbb') |
注意:如果相对路径中有长度为0的字符串,那么当前的工作目录将会被用来代替那个长度为0的字符串。如果两个路径
一样,那么将会返回一个长度为0的字符串,其实就是一个空字符串;
12. path.resolve([from …], to)
将to
解析为一个绝对路径。
如果to不是一个相对于from 参数的绝对路径,to会被添加到from的右边,直到找出一个绝对路径为止。如果使用from路径且仍没有找到绝对路径时,使用当时路径作为目录。返回的结果已经规范化,得到的路径会去掉结尾的斜杠,除非得到的当前路径为root目录。非字符串参数将被忽略。
其实还有一种便于记忆的方法就是把它看做一系列 cd 命令.
1 | path.resolve('foo/bar', '/tmp/file/', '..', 'a/../subfile') |
相似与:
1 | cd foo/bar |
不同的是,有时候不同的路径也是不需要存在的,也可能是文件。
例:
1 | path.resolve('/foo/bar', './baz') |
注意:如果参数中需要解析长度为0的字符串,那么将会返回当前的工作目录来代替它们。
13. path.sep
特定操作系统的分隔符。如 ‘\‘ or ‘/‘.
1 | 例如在 *nix上: |
14. path.win32
提供上述的路径方法,但目前是只兼容win32的方式进行交互。