簡體   English   中英

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

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM