path

path 处理路径。Linux 和 Windows 两个平台的路径规则迥异,所以 path 分为 path.posix 和 path.win32

const path = require('path')
path.posix.basename('C:\\Users') // 'C:\\Users'
path.win32.basename('C:\\Users') // 'Users'
path.basename('C:\\Users')       // 根据当前平台使用 path.posix 或 path.win32

在 Linux 下处理 Windows 路径,需要明确使用 path.win32 才能正确处理路径。

Linux

Windows

Windows 路径不区分大小写,在判断是否为同一位置时要小心。

path 的方法,若无特别说明,它们有以下共同点:

其它相关方法

path.join([...paths])

参数可选,不传入参数时返回 ‘.’。

先用 path.sep 拼接参数(不管是不是 root path),然后 normalize(见 path.normalize)。

path.posix.join('/foo', '/bar/') // "/foo/bar/"

path.normalize(path)

一个必选参数。

处理路径当中的 .., ., 连续的 path.sep 等。

末尾的 path.sep 保留。

path.posix.normalize('/foo///.//../../../bar/') // "/bar/"

path.relative(from, to)

两个必选参数。

先对两个参数调用 path.resolve,将它们转为绝对路径(这意味着 “” 转为当前目录),然后返回它们的相对值。若它们指向相同位置,则返回 ““。

path.resolve([...paths])

参数可选。

参数列表,从后向前逐步构造路径,若构造出绝对路径,则不再进行下去,返回这个绝对路径;若到最后是一个相对路径,则相对于当前目录返回一个绝对路径。因此,不传入参数时返回当前目录(process.cwd())。

返回的路径会 normalize,跟 path.normalize 不一样的是,不保留末尾 path.sep。

Windows 有一种特殊的相对路径(per-drive working directory),比如

假定当前目录为 “F:\tests”

path.win32.resolve('C:\\tmp.txt')   // "C:\\tmp.txt"
path.win32.resolve('C:tmp.txt')     // "C:tmp.txt"
path.win32.resolve('F:tmp.txt')     // "F:\\tests\\tmp.txt"
path.win32.isAbsolute('C:tmp.txt')  // false