1.path.join([...paths])
path.join() 方法使用平台特定的分隔符把全部給定的 path 片段連接到一起,並規范化生成的路徑。
長度為零的 path 片段會被忽略。 如果連接后的路徑字符串是一個長度為零的字符串,則返回 '.',表示當前工作目錄。
以上是nodejs官方文檔上的描述。我們可以抓取幾個關鍵字,“平台特定的分隔符”、“path片段”, “規范化”。
“平台特定的分隔符”:
windows下文件路徑分隔符使用的是"\"
Linux下文件路徑分隔符使用的是"/"
“path片段”:即是說,該方法接收的是多個路徑的部分或全部,然后簡單將其拼接。
“規范化”:顧名思義,如果你給出的路徑片段中任一路徑片段不是一個字符串,則拋出TypeError。
我們來舉個例子:
path.join('/foo', 'bar', 'baz/asdf', 'quux', '..'); // 返回: '/foo/bar/baz/asdf'
這里需要注意:如果路徑中出現"..",那么它前面的路徑片段將被丟失。
2.path.resolve([from....],to)
path.resolve() 方法會把一個路徑或路徑片段的序列解析為一個絕對路徑。
給定的路徑的序列是從右往左被處理的,后面每個 path 被依次解析,直到構造完成一個絕對路徑。 例如,給定的路徑片段的序列為:/foo、/bar、baz,則調用 path.resolve('/foo', '/bar', 'baz') 會返回 /bar/baz。
如果處理完全部給定的 path 片段后還未生成一個絕對路徑,則當前工作目錄會被用上。
生成的路徑是規范化后的,且末尾的斜杠會被刪除,除非路徑被解析為根目錄。
長度為零的 path 片段會被忽略。
如果沒有傳入 path 片段,則 path.resolve() 會返回當前工作目錄的絕對路徑。
以上是nodejs官方文檔上的描述。
簡單來說,其處理方式類似於對這些路徑逐一進行cd操作,與cd操作不同的是,這些引起來的路徑可以是文件,並且可以不必實際存在(resolve()方法不會利用底層的文件系統判斷路徑是否存在,而只是進行路徑字符串操作)。
舉個例子:
path.resolve('/foo/bar', './baz'); // 返回: '/foo/bar/baz' path.resolve('/foo/bar', '/tmp/file/'); // 返回: '/tmp/file' path.resolve('wwwroot', 'static_files/png/', '../gif/image.gif'); // 如果當前工作目錄為 /home/myself/node, // 則返回 '/home/myself/node/wwwroot/static_files/gif/image.gif'
總結一下:path.join只是簡單的將路徑片段進行拼接,並規范化生成一個路徑,而path.resolve則一定會生成一個絕對路徑,相當於執行cd操作。