![](/img/trans.png)
[英]difference beetwen path.join(__dirname , 'views') and path.join(__dirname + 'views') in node.js
[英]Do you need to use path.join in node.js?
眾所周知,Windows使用反斜杠做路徑,其中Unix使用正斜杠進行路徑。 node.js提供path.join()
以始終使用正確的斜杠。 因此,例如,而不是只編寫path.join('a','b','c')
'a/b/c'
path.join('a','b','c')
而是改為使用path.join('a','b','c')
。
但是,似乎盡管存在這種差異,但是如果不對路徑進行規范化(例如使用path.join)並且只編寫路徑,例如a/b/c
node.js,則在Windows上運行腳本沒有問題。
那么在'a/b/c'
上編寫path.join('a','b','c')
有什么好處嗎? 無論平台如何,兩者似乎都有效...
Windows文件系統使用正斜杠或反斜杠作為路徑分隔符沒有問題(從DOS天開始就是這種情況)。 唯一真正的問題是Windows命令行處理器(或者更具體地說,Windows本機命令行實用程序)傾向於將正斜杠解釋為選項說明符而不是路徑組件。 因此,如果需要將路徑傳遞給作為子進程運行的Windows命令,則需要一個反向路徑。 此外,返回路徑的Windows API調用(以及調用Windows API的高級語言的方法)將使用反斜杠,因此即使您沒有將它們傳遞給子進程,也需要對它們進行規范化。
path.join
將處理不必要的分隔符,如果給定的路徑來自未知來源(例如用戶輸入,第三方API等),則可能會出現這種情況。
所以path.join('a/','b')
path.join('a/','/b')
, path.join('a','b')
和path.join('a','/b')
都會給a/b
。
如果不使用它,你通常會對加入的pathes的開始和結束做出預期,知道它們只有沒有或有一個斜線。
我使用path.join
來確保文件夾分隔符位於正確的位置,不一定要確保它使用正斜杠和反斜杠。 例如:
path.join("/var/www", "test")
將在www和test /var/www/test
之間正確插入分隔符
簡短回答:
所有fs.*
函數(例如fs.open
等)都會為您處理路徑名。 因此,您不需要自己使用path.join
並使代碼難以辨認。
答案很長:
所有fs.*
函數調用path._makeLong(path)
,后者又調用path.resolve(path)
,它具有特殊的Windows RegExps,它考慮了反斜杠\\
或正斜杠/
。 你可以自己查看它們的源代碼:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.