需要使用 path. join in node.js 吗?

众所周知,Windows 使用反斜杠路径,而 Unix 使用正斜杠路径。Js 提供 path.join()来始终使用正确的斜杠。因此,例如,你可以用 path.join('a','b','c')代替只写 Unix 的 'a/b/c'

然而,尽管存在这种差异,如果您不规范化您的路径(例如使用 path.join) ,只是编写像 a/b/c node.js 这样的路径,在 Windows 上运行脚本似乎没有问题。

那么,编写 path.join('a','b','c')比编写 'a/b/c'有什么好处吗。

95690 次浏览

我使用 path.join来确保文件夹分隔符位于正确的位置,而不一定要确保它使用正斜杠和反斜杠。例如:

path.join("/var/www", "test")

将正确地插入 www 和测试 /var/www/test之间的分隔符

Windows 文件系统使用正向或反向斜杠作为路径分隔符没有问题(自 DOS 时代以来就是这种情况)。唯一真正的问题是,Windows 命令行处理程序(或者更具体地说,Windows 本机命令行实用程序)倾向于将正斜杠解释为选项说明符,而不是路径组件。因此,如果需要将 Windows 命令的路径作为子进程传递给运行的 Windows 命令,则需要一个反斜线路径。此外,返回路径的 Windows API 调用(以及来自调用 Windows API 的高级语言的方法)将使用反斜杠,因此即使您没有将它们传递给子进程,也需要对它们进行规范化。

简短的回答:

所有 fs.*函数(例如。fs.open等)为您处理路径名。因此,您不需要自己使用 path.join并使您的代码难以辨认。

长话短说:

所有 fs.*函数都调用 path._makeLong(path)path._makeLong(path)又调用 path.resolve(path)path.resolve(path)为 Windows 提供特殊的 RegExps,考虑到反斜杠 \或正斜杠 /。你可以自己查看他们的源代码:

path.join将处理不必要的分隔符,如果给定的路径来自未知来源(如用户输入、第三方 API 等) ,可能会出现这种情况。

所以 path.join('a/','b') path.join('a/','/b')path.join('a','b')path.join('a','/b')都是 a/b

如果不使用它,您通常会对所连接的路径的开始和结束产生期望,因为您知道它们只有一条斜线。