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

因为每个人都知道Windows使用反斜杠的path,其中unix做与正斜杠的path。 Node.js提供path.join()来始终使用正确的斜杠。 因此,例如,不是只写'a/b/c' unix 'a/b/c'而是使用path.join('a','b','c')

然而,似乎如果你不规范化你的path(例如使用path.join),只是写一些像a/b/c node.js这样a/b/cpath,在windows上运行你的脚本没有问题。

那么在写入path.join('a','b','c')'a/b/c'之上还有什么好处吗? 因为无论平台如何都似乎工作…

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

path.join会照顾不必要的分隔符,如果给定的path来自不明来源(例如,用户input,第三方API等),则可能发生这种分隔符。

所以path.join('a/','b') path.join('a/','/b')path.join('a','b')path.join('a','/b')将全部给出a/b

如果不使用它,通常会对join的path的开始和结束有所期待,因为他们知道它们只有一个或者一个斜线。

我使用paths.join来确保文件夹分隔符在正确的位置,而不一定要确保它使用正向反斜线。 例如:

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

将在www和test /var/www/test之间正确插入分隔符

简短的回答:

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

很长的回答:

所有的fs.*函数调用path._makeLong(path) ,后者又调用path.resolve(path) ,它具有特殊的Windows RegExps,它考虑了反斜杠\或正斜杠/ 。 你可以看看自己的源代码: