node模塊之path——path.join和path.resolve的區別


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操作。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM