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

bal*_*ton 125 unix windows path node.js

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

但是,似乎尽管存在这种差异,但是如果不对路径进行规范化(例如使用path.join),并且只编写a/b/cnode.js之类的路径,则在Windows上运行脚本时没有问题.

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

ebo*_*man 98

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

  • 这个答案并没有说明为什么在典型的 Node.js 应用程序中使用它。或者也许只是我不明白。虽然这很有趣。 (2认同)

dro*_*nus 87

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

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

如果不使用它,你通常会对加入的pathes的开始和结束做出预期,知道它们只有没有或有一个斜线.


Tim*_*ple 47

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

path.join("/var/www", "test")
Run Code Online (Sandbox Code Playgroud)

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

  • 因为我不总是确定从其他来源获得的路径值是否会有斜杠.我上面的例子是人为的.这些路径通常不是硬编码的,而是从其他配置文件,用户输入,库等中提取出来的. (23认同)
  • 我对这个答案持怀疑态度,直到5分钟后我的代码爆炸了`return baseDir + relativePath + filename;`.我立即用`return path.join(baseDir,relativePath,filename);`替换它.这确实很有帮助! (23认同)
  • 我不明白这一点。如果您在变量中包含这些脚本,为什么不手动添加斜杠呢? (2认同)
  • 我也很难理解这个答案。看不到任何值。 (2认同)

Raf*_*ier 31

简短回答:

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

答案很长:

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