最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Node.js中path.resolve與path.join的區(qū)別與作用詳解

 更新時間:2023年03月17日 14:37:40   作者:HBerlin  
path.resolve和path.join都是屬于path核心模塊下的方法,用來拼接路徑,下面這篇文章主要給大家介紹了關(guān)于Node.js中path.resolve與path.join的區(qū)別與作用的相關(guān)資料,需要的朋友可以參考下

前言:

講解之前,大致的講解一下所涉及的知識點;

path 模塊:用于處理文件和目錄的路徑的實用工具,使用前需先引入模塊;

path.join():用于鏈接路徑,并且會自動轉(zhuǎn)換當(dāng)前系統(tǒng)路徑的分隔符"/"或"\";

path.resolve():也是用于鏈接路徑,但卻和path.join()方法卻很多不同,而且path.resolve()方法本身就自帶一個to的絕對路徑參數(shù),也會自動轉(zhuǎn)換分隔符,在某些場景用起來也方便很多;

__dirname:是node的一個全局變量,獲得當(dāng)前文件所在目錄的完整目錄名,搭配path一起使用;

話不多說,下面直接開始演示,演示完畢后有總結(jié)他們的特性。

關(guān)于 path.resolve() 的使用

語法:path.resolve([from ...], to)

案例一:

演示當(dāng)"path"路徑為空時,得到結(jié)果是當(dāng)前文件所在的絕對路徑,類似 __dirname ;

// 引入path模塊
const path = require('path');
 
// 此處直接打印
console.log(path.resolve());
console.log(path.resolve(''));
console.log(path.resolve(__dirname);
// 輸出:E:\Berlin-Case\path
// 輸出:E:\Berlin-Case\path
// 輸出:E:\Berlin-Case\path

案例二:

演示字符以 ./ 開頭或者沒有字符時,得到的結(jié)果是加不加 ./ 都不影響路徑的拼接;

// 引入path模塊
const path = require('path');
 
// 此處直接打印
console.log(path.resolve());
console.log(path.resolve('a'));
console.log(path.resolve('a','b'));
console.log(path.resolve('c','b','a'));
console.log(path.resolve('./a'));
console.log(path.resolve('a','./b'));
console.log(path.resolve('./c','b','./a'));
// 輸出:E:\Berlin-Case\path
// 輸出:E:\Berlin-Case\path\a
// 輸出:E:\Berlin-Case\path\a\b
// 輸出:E:\Berlin-Case\path\c\b\a
// 輸出:E:\Berlin-Case\path\a
// 輸出:E:\Berlin-Case\path\a\b
// 輸出:E:\Berlin-Case\path\c\b\a

案例三: 

演示字符以 / 開頭,path.resolve()的特點之一就是碰到"/"斜桿則會直接跳轉(zhuǎn)到E盤的根路徑(在哪個盤運行就是哪個盤),這里跟在終端輸出cd /是一樣的原理,也會跳轉(zhuǎn)到E盤的根路徑;

// 引入path模塊
const path = require('path');
 
// 此處直接打印
console.log(path.resolve());
console.log(path.resolve('/a'));
console.log(path.resolve('/a','b','c'));
console.log(path.resolve('a','/b','c'));
console.log(path.resolve('c','b','/a'));
// 輸出:E:\Berlin-Case\path
// 輸出:E:\a
// 輸出:E:\a\b\c
// 輸出:E:\b\c
// 輸出:E:\a

案例四:

演示字符以../開頭,也就是上一層的意思,path.resolve()會把下個要拼接的"path"路徑給覆蓋掉;

// 引入path模塊
const path = require('path');
 
// 此處直接打印
console.log(path.resolve());
console.log(path.resolve('../'));
console.log(path.resolve('../a'));
console.log(path.resolve('../a','b'));
console.log(path.resolve('a','../b'));
console.log(path.resolve('c','b','../a'));
console.log(path.resolve('../c','b','a'));
// 輸出:E:\Berlin-Case\path
// 輸出:E:\Berlin-Case\
// 輸出:E:\Berlin-Case\a
// 輸出:E:\Berlin-Case\a\b
// 輸出:E:\Berlin-Case\path\b
// 輸出:E:\Berlin-Case\path\c\a
// 輸出:E:\Berlin-Case\c\b\a

 案例五:

演示path.resolve()搭配__dername變量

// 引入path模塊
const path = require('path');
 
// 此處直接打印
console.log(path.resolve(__dirname,'a'));
console.log(path.resolve('a','b',__dirname));
console.log(path.resolve(__dirname,'./a','b'));
console.log(path.resolve(__dirname,'/a','b'));
console.log(path.resolve(__dirname,'../a','b'));
console.log(path.resolve(__dirname,'a','../b'));
console.log(path.resolve('a','/b',__dirname));
 
// 輸出:E:\Berlin-Case\path\a
// 輸出:E:\Berlin-Case\path
// 輸出:E:\Berlin-Case\path\a\b
// 輸出:E:\a\b
// 輸出:E:\Berlin-Case\a\b
// 輸出:E:\Berlin-Case\path\b
// 輸出:E:\Berlin-Case\path

 從案例五例子可以看出,__dirname變量需放在第一個,否則會覆蓋在它之前的'path'路徑,包括斜杠' / ',還有個要注意的點,__dirname之后也不能出現(xiàn)' / ',不然也覆蓋之前的路徑;

總結(jié):

path.resolve("./path")的特性有以下幾點:

  1. 從右往左讀取"path"路徑,并開始拼接,本身就自帶絕對路徑參數(shù) "to" ;
  2. 當(dāng)"path"路徑為空時,則會直接獲取當(dāng)前文件所在的絕對路徑;
  3. 當(dāng)遇到字符以 ./ 開頭或者沒有字符,則正常拼接,所以可省略不加字符;
  4. 當(dāng)遇到字符以 / 開頭,則不會拼接到前面的路徑并以自身所在盤為根路徑加以拼接;
  5. 當(dāng)遇到字符以 ../ 開頭,則會將下一個要拼接"path"路徑給覆蓋,然后繼續(xù)往左拼接;
  6. 搭配__dirname時,需將放置第一位,且與 ' / ' 有互相覆蓋的沖突;

關(guān)于 path.join() 的使用

語法:path.join([path1][, path2][, ...])

案例一:

演示當(dāng)"path"路徑為無或空時,得到的結(jié)果是" . ",只有傳入__dirname的時候,才能得到絕對路徑

// 引入path模塊
const path = require('path');
 
// 此處直接打印
console.log(path.join());
console.log(path.join(''));
console.log(path.join(__dirname));
// 輸出:.
// 輸出:.
// 輸出:E:\Berlin-Case\path

案例二:

演示字符以 ./ 開頭或者 / 和沒有字符,得到的結(jié)果是加不加都不影響路徑的拼接,此時你應(yīng)該發(fā)現(xiàn)跟path.resolve()的有所不同了,因為resolve()只會單純的去拼接你寫入的"path"路徑,而不會像path.resolve()那樣用cd去運作;

// 引入path模塊
const path = require('path');
 
// 此處直接打印
console.log(path.join());
console.log(path.join('a'));
console.log(path.join('a','b'));
console.log(path.join('c','b','a'));
console.log(path.join('./a'));
console.log(path.join('a','./b'));
console.log(path.join('./c','b','./a'));
console.log(path.join('/a'));
console.log(path.join('a','/b'));
console.log(path.join('/c','b','/a'));
// 輸出:.
// 輸出:a
// 輸出:a\b
// 輸出:c\b\a
// 輸出:a
// 輸出:a\b
// 輸出:c\b\a
// 輸出:\a
// 輸出:a\b
// 輸出:\c\b\a

案例三:

演示以 ../ 開頭的字符,此時你會發(fā)現(xiàn)join()不僅是單純的去拼接路徑,而且也是從右到左去拼接的,../之后還有"path"路徑的話,也是會被覆蓋掉;

// 引入path模塊
const path = require('path');
 
// 此處直接打印
console.log(path.join());
console.log(path.join('../'));
console.log(path.join('../a'));
console.log(path.join('../a','b'));
console.log(path.join('a','../b'));
console.log(path.join('c','b','../a'));
console.log(path.join('../c','b','a'));
 
// 輸出:.
// 輸出:..\
// 輸出:..\a
// 輸出:..\a\b
// 輸出:b
// 輸出:c\a
// 輸出:..\c\b\a

案例四:

演示path.join()搭配__dername變量,為什么一定要把它放在第一位?

// 引入path模塊
const path = require('path');
 
// 此處直接打印
console.log(path.join(__dirname,'a'));
console.log(path.join('a',__dirname));
 
// 輸出:E:\Berlin-Case\path\a
// 輸出:a\E:\Berlin-Case\path

看出區(qū)別了嗎?對的,沒錯,join會不管對錯,直接把你寫入的路徑都拼接到一塊,這也是為什么要放在第一位的原因,當(dāng)然resolve()就沒這種問題,接下來繼續(xù)演示,與字符的搭配;

// 引入path模塊
const path = require('path');
 
// 此處直接打印
console.log(path.join(__dirname,'/a'));
console.log(path.join(__dirname,'./a'));
console.log(path.join(__dirname,'../'));
console.log(path.join(__dirname,'../a'));
console.log(path.join(__dirname,'../a','b'));
 
// 輸出:E:\Berlin-Case\path\a
// 輸出:E:\Berlin-Case\path\a
// 輸出:E:\Berlin-Case\
// 輸出:E:\Berlin-Case\a
// 輸出:E:\Berlin-Case\a\b

以上示例可以看出,'/'  './' 這兩個字符在path.join()的方法中是不起作用的,不加也是一樣的效果,只有 '../ ' 才有返回上級目錄的作用,所以使用path.join()時,加個__dirname,拼上你要的"path"路徑即可;(不加會很麻煩哦)

總結(jié):

  • 在path.join()方法中,'/' 與 './' 一般情況下可以不用(特殊情況的拼接除外哈);
  • 在path.join()方法中,最好與__dirname變量搭配使用;
  • path.join()方法也是從右到左依次被解析排列組成路徑的;

path.resolve與path.join的區(qū)別

結(jié)合上面兩個方法的演示后的總結(jié),它們之間的區(qū)別如下:

  1. path.resolve()自帶to參數(shù),也就是當(dāng)前輸出文件的路徑,而path.join()沒有;
  2. path.resolve()遇到 ' / ' 則會跳轉(zhuǎn)到根目錄(E:\),而path.join()則沒效果;
  3. path.resove()搭配__dirname變量使用時,就算__dirname在最右邊,resolve()會把左邊的"path"路徑給覆蓋掉,形成正確的路徑,而path.join()正常拼接,無論對錯;

到此這篇關(guān)于Node.js中path.resolve與path.join的區(qū)別與作用的文章就介紹到這了,更多相關(guān)Node.js path.resolve與path.join內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • node.js正則表達(dá)式獲取網(wǎng)頁中所有鏈接的代碼實例

    node.js正則表達(dá)式獲取網(wǎng)頁中所有鏈接的代碼實例

    這篇文章主要介紹了node.js正則表達(dá)式獲取網(wǎng)頁中所有鏈接的代碼實例,使用正則表達(dá)式實現(xiàn),需要的朋友可以參考下
    2014-06-06
  • 關(guān)于訪問node?express中的static靜態(tài)文件方法

    關(guān)于訪問node?express中的static靜態(tài)文件方法

    這篇文章主要介紹了關(guān)于訪問node?express中的static靜態(tài)文件方法,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-09-09
  • connect中間件session、cookie的使用方法分享

    connect中間件session、cookie的使用方法分享

    今天大象哥用了下connect的session和cookie,感覺還挺好用的,分享一下(里面坑挺多的,文檔寫的太模糊了,費了哥不少時間)。
    2014-06-06
  • node.js應(yīng)用后臺守護(hù)進(jìn)程管理器Forever安裝和使用實例

    node.js應(yīng)用后臺守護(hù)進(jìn)程管理器Forever安裝和使用實例

    這篇文章主要介紹了node.js應(yīng)用后臺守護(hù)進(jìn)程管理器Forever安裝和使用實例,forever可以看做是一個nodejs的守護(hù)進(jìn)程,能夠啟動,停止,重啟我們的app應(yīng)用,需要的朋友可以參考下
    2014-06-06
  • 詳解nodeJs文件系統(tǒng)(fs)與流(stream)

    詳解nodeJs文件系統(tǒng)(fs)與流(stream)

    這篇文章主要介紹了詳解nodeJs文件系統(tǒng)(fs)與流(stream),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-01-01
  • 詳解如何在Node.js中實現(xiàn)HTTP/2推送信息

    詳解如何在Node.js中實現(xiàn)HTTP/2推送信息

    HTTP/2 是一種現(xiàn)代化的網(wǎng)絡(luò)協(xié)議,它引入了多路復(fù)用、頭部壓縮和服務(wù)器推送等特性,其中,服務(wù)器推送允許服務(wù)器在客戶端請求資源時,主動推送額外的資源,提升頁面加載速度,下面將介紹如何在 Node.js 中實現(xiàn) HTTP/2 推送信息,需要的朋友可以參考下
    2024-12-12
  • node.js使用express-jwt報錯:expressJWT?is?not?a?function解決

    node.js使用express-jwt報錯:expressJWT?is?not?a?function解決

    這篇文章主要給大家介紹了關(guān)于node.js使用express-jwt報錯:expressJWT?is?not?a?function解決的相關(guān)資料,文中通過實例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2023-03-03
  • nodejs利用readline提示輸入內(nèi)容實例代碼

    nodejs利用readline提示輸入內(nèi)容實例代碼

    這篇文章主要給大家介紹了關(guān)于nodejs利用readline提示輸入內(nèi)容的相關(guān)資料,Readline是Node.js里實現(xiàn)標(biāo)準(zhǔn)輸入輸出的封裝好的模塊,通過這個模塊我們可以以逐行的方式讀取數(shù)據(jù)流,需要的朋友可以參考下
    2021-07-07
  • Koa2路由及koa腳手架使用入門詳解

    Koa2路由及koa腳手架使用入門詳解

    這篇文章主要為大家介紹了Koa2路由及koa腳手架的使用入門詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-05-05
  • Nodejs 復(fù)制文件/文件夾的方法

    Nodejs 復(fù)制文件/文件夾的方法

    這篇文章主要介紹了Nodejs 復(fù)制文件/文件夾的方法,需要的朋友可以參考下
    2017-08-08

最新評論

南皮县| 拉孜县| 辽宁省| 民丰县| 阿鲁科尔沁旗| 沙洋县| 南康市| 雷州市| 阜新市| 西昌市| 池州市| 五河县| 上犹县| 太仆寺旗| 佛坪县| 库伦旗| 花莲市| 阿瓦提县| 都匀市| 北流市| 乐山市| 大英县| 揭东县| 常宁市| 饶河县| 湖州市| 清流县| 白朗县| 泌阳县| 临清市| 岑巩县| 莆田市| 德昌县| 军事| 昭苏县| 南澳县| 临西县| 博爱县| 富锦市| 沙洋县| 平江县|