你需要在node.js中使用path.join吗?

时间:2012-03-18 06:44:14

标签: node.js windows unix path

众所周知,Windows使用反斜杠做路径,其中Unix使用正斜杠进行路径。 node.js提供path.join()以始终使用正确的斜杠。因此,例如,不是仅编写Unix 'a/b/c',而是代替path.join('a','b','c')

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

path.join('a','b','c')相比,写'a/b/c'有什么好处?无论平台如何,两者似乎都有效......

4 个答案:

答案 0 :(得分:95)

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

答案 1 :(得分:84)

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

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

不使用它,你通常会对加入的pathes的开始和结束有所期待,知道它们只有没有或有一个斜线。

答案 2 :(得分:44)

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

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

将在www和test /var/www/test

之间正确插入分隔符

答案 3 :(得分:30)

简短回答:

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

答案很长:

所有fs.*个函数都会调用path._makeLong(path),而path.resolve(path)会调用\,它具有针对Windows的特殊RegExps,它会考虑反斜杠/或正斜杠{{1 }}。您可以在以下位置查看自己的源代码: