node中path.resolve和path.join區別

  • 相同點:對於 ./ 和 ../ 處理方式相同,按照常規相對路徑理解就可以
  • 不同點:
  1. resolve會返回一個絕對路徑,join會返回一個路徑字符串,我把它理解爲相對路徑吧;
  2. 對於 / 的處理方式不同,resolve把 / 當作根路徑處理,join把 / 忽略。

通過實例說明一下(以下是windows系統測試,蘋果和Linux會有些不一樣,理解原理即可)

path.join

/* 測試常規用法 */
path.join('a', 'b', 'c')
// 過程    \\a -> \\a\\b -> \\a\\b\\c
// 結果    \\a\\b\\c

/* 測試一堆 / 的處理 */
path.join('/a//', '//b//', '///c')
// 過程    \\a -> \\a\\b -> \\a\\b\\c
// 結果    \\a\\b\\c
// 解釋:和上一個結果相同,因爲不管多少個/都會被忽略

/* 測試 ./ 的處理 */
path.join('a', './b', './c')
// 過程    \\a -> \\a\\b -> \\a\\b\\c
// 結果    \\a\\b\\c
// 解釋:和第一個結果仍相同,因爲./代表當前路徑,有沒有./含義都是一樣的

/* 測試 ../ 的處理 */
path.join('a', 'b', '../c')
// ps:可以把它看作這樣的形式:path.join('a', 'b', '../', 'c')
// 過程    \\a -> \\a\\b -> \\a(遇到../變成上一級目錄,所以又回到\\a) -> \\a\\c
// 結果    \\a\\c

path.resolve

先聲明,當前命令行窗口在E:\Books目錄下,如下圖

/* 常規用法 */
path.resolve('a', 'b', 'c')
// 過程    E:\\Books -> E:\\Books\\a -> E:\\Books\\a\\b -> E:\\Books\\a\\b\\c
// 結果    E:\\Books\\a\\b\\c
// 解釋:和join相比,就是以當前路徑爲絕對路徑,依次向後拼接

/* / 的處理,這裏和join有區別 */
path.resolve('a', '/b', 'c')
// ps:可以看作這樣形式:path.resolve('a', '/', 'b', 'c')
// 過程    E:\\Books -> E:\\Books\\a -> E:(遇見/,直接回到磁盤根路徑,當前是E盤) -> E:\\b -> E:\\b\\c
// 結果    E:\\b\\c
// 解釋:本人用的win系統,遇見/直接回到盤符位置,蘋果系統可自行測試

/* ./ 的處理 */
path.resolve('./a', './b', './c')
// 過程    E:\\Books -> E:\\Books\\a -> E:\\Books\\a\\b -> E:\\Books\\a\\b\\c
// 結果    E:\\Books\\a\\b\\c
// 解釋:和第一種結果相同,./被看作當前路徑,寫不寫效果一樣

/* ../ 的處理 */
path.resolve('a', '../b', 'c')
// ps:可看作這種形式:path.resolve('a', '../', 'b', 'c')
// 過程    E:\\Books -> E:\\Books\\a -> E:\\Books(遇見../,變成上一級目錄) -> E:\\Books\\b -> E:\\Books\\b\\c
// 結果    E:\\Books\\b\\c

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章