Path

# path (路径)

# path.basename(path[, ext])

path.basename() 方法返回一个 path 的最后一部分,类似于 Unix 中的 basename 命令。 没有尾部文件分隔符,请查阅 path.sep。

path.basename("/foo/bar/baz/asdf/quux.html");
// 返回: 'quux.html'

path.basename("/foo/bar/baz/asdf/quux.html", ".html");
// 返回: 'quux'

如果 path 不是一个字符串或提供了 ext 但不是一个字符串,则抛出 TypeError。

# path.dirname(path)

path.dirname() 方法返回一个 path 的目录名,类似于 Unix 中的 dirname 命令。

path.dirname("/foo/bar/baz/asdf/quux");
// 返回: '/foo/bar/baz/asdf'

# path.extname(path)

path.extname() 方法返回 path 的扩展名,即从 path 的最后一部分中的最后一个 .(句号)字符到字符串结束。 如果 path 的最后一部分没有 . 或 path 的文件名(见 path.basename())的第一个字符是 .,则返回一个空字符串。

path.extname("index.html");
// 返回: '.html'

path.extname("index.coffee.md");
// 返回: '.md'

path.extname("index.");
// 返回: '.'

path.extname("index");
// 返回: ''

path.extname(".index");
// 返回: ''

# path.format(pathObject)

path.format() 方法会从一个对象返回一个路径字符串。 与 path.parse() 相反。

pathObject <Object>

dir <string>

root <string>

base <string>

name <string>

ext <string>

返回: <string>

# path.isAbsolute(path)

path.isAbsolute() 方法会判定 path 是否为一个绝对路径。

如果给定的 path 是一个长度为零的字符串,则返回 false。

# path.join([...paths])

path.join() 方法使用平台特定的分隔符把全部给定的 path 片段连接到一起,并规范化生成的路径。

长度为零的 path 片段会被忽略。 如果连接后的路径字符串是一个长度为零的字符串,则返回 '.',表示当前工作目录。

path.join("/foo", "bar", "baz/asdf", "quux", "..");
// 返回: '/foo/bar/baz/asdf'

path.join("foo", {}, "bar");
// 抛出 'TypeError: Path must be a string. Received {}'

# path.normalize(path)

path.normalize() 方法会规范化给定的 path,并解析 '..' 和 '.' 片段。

如果 path 是一个长度为零的字符串,则返回 '.',表示当前工作目录。

例如,在 POSIX 上:

path.normalize("/foo/bar//baz/asdf/quux/..");
// 返回: '/foo/bar/baz/asdf'

在 Windows 上:

path.normalize("C:\\temp\\\\foo\\bar\\..\\");
// 返回: 'C:\\temp\\foo\\'

尽管 Windows 会识别多种文件路径分隔符,但是两种分隔符在 Window 上会被()分隔符取代:

path.win32.normalize("C:////temp\\\\/\\/\\/foo/bar");
// Returns: 'C:\\temp\\foo\\bar'

# path.parse(path)

path.parse() 方法返回一个对象,对象的属性表示 path 的元素。 尾部文件分隔符会被忽略,请看 path.sep.

返回的对象有以下属性:

{
    dir <string>
    root <string>
    base <string>
    name <string>
    ext <string>
}

# path.resolve([...paths])

path.resolve() 方法会把一个路径或路径片段的序列解析为一个绝对路径。

path.resolve("/foo/bar", "./baz");
// 返回: '/foo/bar/baz'

path.resolve("/foo/bar", "/tmp/file/");
// 返回: '/tmp/file'

path.resolve("wwwroot", "static_files/png/", "../gif/image.gif");
// 如果当前工作目录为 /home/myself/node,
// 则返回 '/home/myself/node/wwwroot/static_files/gif/image.gif'

# path.sep

提供了平台特定的路径片段分隔符:

Windows 上是 \ POSIX 上是 / 例如,在 POSIX 上:

"foo/bar/baz".split(path.sep);
// 返回: ['foo', 'bar', 'baz']

在 Windows 上:

"foo\\bar\\baz".split(path.sep);
// 返回: ['foo', 'bar', 'baz']

注意:在 Windows 上,斜杠字符(/)和反斜杠字符(\)都可作为路径分隔符; 但 path 的方法只添加反斜杠(\)。

# path.posix

path.posix 属性提供了 path 方法针对 POSIX 的实现。

path.posix.normalize("C:////temp\\\\/\\/\\/foo/bar");

# path.win32

path.win32 属性提供了 path 方法针对 Windows 的实现。

path.win32.normalize("C:////temp\\\\/\\/\\/foo/bar");

# Windows 与 POSIX

path 模块的默认操作会根据 Node.js 应用程序运行的操作系统的不同而变化。 比如,当运行在 Windows 操作系统上时,path 模块会认为使用的是 Windows 风格的路径。

例如,对 Windows 文件路径 C:\temp\myfile.html 使用 path.basename() 函数,运行在 POSIX 上与运行在 Windows 上会产生不同的结果:

在 POSIX 上:

path.basename("C:\\temp\\myfile.html");
// 返回: 'C:\\temp\\myfile.html'

在 Windows 上:

path.basename("C:\\temp\\myfile.html");
// 返回: 'myfile.html'