詳解nodeJS里的path.join 和 path.resolve方法

path.join 定義

path.join([path1][, path2][, ...])
用于連接路徑。會把全部給定的 path 片段連接到一起,并規(guī)范化生成的路徑。

path.join('/foo', 'bar', './baz');
// '/foo/bar/baz'

path.join('/foo', 'bar', '/baz', '..');
// '/foo/bar'

要點:如果連接后的路徑字符串是一個長度為零的字符串,則返回 '.',表示當(dāng)前工作目錄。

如果我當(dāng)前工作目錄是 E:\nodejs
path.join('');
// 'E:\nodejs'

path.resolve定義

path.resolve() 方法將路徑或路徑片段的序列解析為絕對路徑

它可以接受多個參數(shù),依次表示所要進入的路徑,直到將最后一個參數(shù)轉(zhuǎn)為絕對路徑。如果根據(jù)參數(shù)無法得到絕對路徑,就以當(dāng)前所在路徑作為基準(zhǔn)。除了根目錄,該方法的返回值都不帶尾部的斜杠。

是不是覺得很難理解?官方大白話都是如此。最好結(jié)合代碼理解,如下代碼:

1.console.log(path.resolve());  //E:\nodejs
2.console.log(path.resolve(''));  //E:\nodejs
3.console.log(path.resolve('.'));  //E:\nodejs
4.console.log(path.resolve(__dirname));  //E:\nodejs
5.console.log(path.resolve('js/common','test'));  //E:\nodejs\js\common\test
6.console.log(path.resolve('./js/common','test'));  //E:\nodejs\js\common\test
7.console.log(path.resolve('js/common','./test'));  //E:\nodejs\js\common\test
8.console.log(path.resolve('./js/common','./test'));  //E:\nodejs\js\common\test
9.console.log(path.resolve('/js/common','test'));  //E:\js\common\test
10.console.log(path.resolve('js/common','/test'));  //E:\test
11.console.log(path.resolve('/js/common','/test'));  //E:\test
12.console.log(path.resolve('/js/common','../test'));  //E:\js\test
13.console.log(path.resolve('js/common','../test'));  //E:\nodejs\js\test

上面代碼的已知條件:我當(dāng)前工作目錄是 E:\nodejs

理解要點:
1、從右往左依次解析(很重要,很重要,很重要?。。?br> 2、代碼里序號1-4的幾種寫法會返回當(dāng)前工作目錄。
3、代碼里序號5-8中,’test’ 等價于 ‘./test’ :是相對路徑,假如相對路徑片段在最右側(cè),則需要向前拼接,
直到遇到以斜杠(/)開頭的參數(shù)結(jié)束,假如直到解析到第一個參數(shù)仍然沒有遇到以斜杠開頭的,則直接拼接到你當(dāng)前工作目錄(也就是 E:\nodejs)。
4、 代碼里序號10-11說明的是參數(shù)從右至左,遇到第一個以斜杠開頭的參數(shù)停止解析,無論前面是否還有參數(shù)。
5、 ‘../test’ 解析之后就是test的上一級。如代碼里序號12,前面是'/js/common',帶有'/',所以會以'E:\js\common'作為根目錄去拼接'../test',即為'E:\js\test'。
6、代碼里序號13跟12之所以不同是因為序號13里的‘js/common’不帶‘/’。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容