众所周知,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'
有什么好处?无论平台如何,两者似乎都有效......
答案 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 }}。您可以在以下位置查看自己的源代码: