2012-05-30 38 views
76

path.normalize(your_path)path.resolve(your_path)之間有什麼區別(如果有)?Node.js中path.normalize和path.resolve之間的區別

我知道path.resolve(...)可以接受多個參數,但是與單個參數的行爲相同,調用path.normalize()

編輯:如果他們都應該有同樣的表現方式,我不明白露出path.normalize(...)功能時,你可以簡單地傳遞路徑進入path.resolve(...)或者,也許,它是文檔目的的目的。例如,他們爲path.resolve(...)的文件中說:

...生成的路徑是正常的,這...

path.normalize(...)使得它更容易解釋什麼是「標準化」的意思? ??我不知道。

回答

164

path.normalize獲取路徑中的額外.,..等。 path.resolve解析成絕對路徑的路徑。示例(我當前的工作目錄是/Users/mtilley/src/testing):

> path.normalize('../../src/../src/node') 
'../../src/node' 
> path.resolve('../../src/../src/node') 
'/Users/mtilley/src/node' 

換句話說,path.normalize是「什麼是我可以採取將帶我去同一個地方作爲輸入的最短路徑」,而path.resolve是「什麼是我的目的地,如果我走這條道路。「

+0

不錯。感謝你的回答!這一直在困擾我一段時間。 Node文檔雖然通常非常好,但讓我對這一點感到困惑。 – BMiner

+13

另請注意,path.normalize可以處理您可能想要規範化的任何路徑,並且僅表示路徑的字符串操作,而path.resolve將使用文件系統和當前目錄將路徑解析爲絕對路徑。這使得它們的行爲非常不同,因爲path.normalize可能用於tar文件內的路徑,遠程文件系統或完全抽象的內容。 – Nakedible

+0

它們與path.join有什麼不同? – Vijey

4

從文檔:

另一種方式去思考解決的是CD的序列中的shell命令。

鏈接到path.resolvepath.normalize在文檔中。我大多不想在答案中提供鏈接,但Node.js文檔非常體面。

+0

我想我不明白暴露規範化(...)功能的目的,當你可以簡單地將路徑傳遞到path.resolve(...) – BMiner

+6

您正在規範化的路徑可能並不存在文件系統,例如您可能正在規劃要創建的文件的路徑,或者您可能會規範化相對URL路徑。 – lanzz

+0

其實我不知道你爲什麼要用normalize來解析。 – Pickels