Node.js常用三大模塊之path模塊
相對(duì)路徑和絕對(duì)路徑
概念
在這里首先先復(fù)習(xí)一下相對(duì)路徑和絕對(duì)路徑:
- 絕對(duì)路徑 : 文件真實(shí)的存放位置 (以Web 站點(diǎn)根目錄為參考基礎(chǔ)的目錄路徑。之所以稱為絕對(duì),意指當(dāng)所有網(wǎng)頁(yè)引用同一個(gè)文件時(shí),所使用的路徑都是一樣的。其實(shí)絕對(duì)路徑與相對(duì)路徑的不同處,只在于描述目錄路徑時(shí),所采用的參考點(diǎn)不同。由于對(duì)網(wǎng)站上所有文件而言,根目錄這個(gè)參考點(diǎn)對(duì)所有文件都是一樣的,因此,運(yùn)用以根目錄為參考點(diǎn)的路徑描述方式才會(huì)被稱之為絕對(duì)路徑)
- 相對(duì)路徑 : 相對(duì)于當(dāng)前位置的路徑 (以引用文件之網(wǎng)頁(yè)所在位置為參考基礎(chǔ),而建立出的目錄路徑。因此,當(dāng)保存于不同目錄的網(wǎng)頁(yè)引用同一個(gè)文件時(shí),所使用的路徑將不相同,故稱之為相對(duì))
路徑特殊符號(hào)
"./"
------ 代表目前所在的目錄,相對(duì)路徑
"../"
------ 代表上一層目錄,相對(duì)路徑
"../../"
------ 代表的是上一層目錄的上一層目錄,相對(duì)路徑
"/"
------ 代表根目錄,絕對(duì)路徑
"C:/users/"
------ 代表根目錄,絕對(duì)路徑
示例:
一般情況下我們不會(huì)去使用絕對(duì)路徑引入文件,一般使用相對(duì)路徑,因?yàn)橄鄬?duì)路徑會(huì)更加的靈活,以及在書(shū)寫的項(xiàng)目上線的時(shí)候使用絕對(duì)路徑將很麻煩,相對(duì)路徑y(tǒng)yds!
現(xiàn)在需要實(shí)現(xiàn)一個(gè)小功能,將該圖片以不同形式引入到html文件中:
絕對(duì)路徑
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Document</title> </head> <style> img { width: 1200px; height: 700px; } </style> <body> <img src="/image/23on23-01_2.jpg" alt=""> </body> </html>
在這里使用了路徑符號(hào)/
,/
這個(gè)符號(hào)代表了根目錄(D:/node復(fù)盤/03)。
相對(duì)路徑
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Document</title> </head> <style> img { width: 1200px; height: 700px; } </style> <body> <img src="./image/23on23-01_2.jpg" alt=""> </body> </html>
在這里使用了路徑符號(hào)./
,./
代表了目前所在的目錄(D:/node復(fù)盤/03)。
成功引入:
path路徑模塊
什么是path路徑模塊
path 模塊是 Node.js 官方提供的、用來(lái)處理路徑的模塊。它提供了一系列的方法和屬性,用來(lái)滿足用戶對(duì)路徑的處理需求。
獲取路徑名path.dirname()
返回 path 的目錄名。 尾部的目錄分隔符將被忽略。語(yǔ)法格式:
path.dirname(path)
代碼示例:
const path = require('path') console.log(path.dirname(`D:/node/02/hello.js`)); // D:/node/02
這個(gè)方法打印出了目錄名D:/node/02
路徑拼接path.join()
使用 path.join() 方法,可以把多個(gè)路徑片段拼接為完整的路徑字符串,語(yǔ)法格式如下:
path.join([...paths])
參數(shù)解讀:
- …paths < string > 路徑片段的序列
- 返回值: < string >
代碼示例:
const path = require('path') // 注意: ../會(huì)抵消前面的路徑 const pathStr = path.join('/a','/b/c','../','./c','/d') console.log(pathStr); // \a\b\c\d
首先要引入path
模塊,node中引入模塊使用內(nèi)置的方法require()
,如上例中寫多個(gè)字符串,最后打印出來(lái)了\a\b\c\d
,就是join的拼接功能,但是在這里要注意一點(diǎn):../
會(huì)抵消前面的路徑,比如在案例中../
抵消了/c
獲取路徑中文件名path.basename()
使用 path.basename() 方法,可以獲取路徑中的最后一部分,常通過(guò)該方法獲取路徑中的文件名,語(yǔ)法格式如下:
path.basename(path[, ext])
參數(shù)解讀:
- path: 文件路徑
- ext: 文件擴(kuò)展名
代碼示例:
const path = require('path') // 定義文件的存放路徑 const fpath = '/a/b/c/index.html' const fullName = path.basename(fpath) console.log(fullName) // index.html const nameWithoutExt = path.basename(fpath, '.html') console.log(nameWithoutExt) // index
當(dāng)沒(méi)有傳入第二個(gè)參數(shù)的時(shí)候,返回的將是路徑的最后部分,所以返回了index.html
,當(dāng)?shù)诙€(gè)參數(shù)傳入時(shí),將會(huì)在第一種情況的基礎(chǔ)下裁剪掉第二個(gè)參數(shù)值,所以返回了index
獲取路徑中文件擴(kuò)展名path.extname()
使用 path.extname() 方法,返回路徑中文件的后綴名,即路徑中最后一個(gè)'.'之后的部分。如果一個(gè)路徑中并不包含'.'或該路徑只包含一個(gè)'.' 且這個(gè)'.'為路徑的第一個(gè)字符,則此命令返回空字符串。語(yǔ)法格式如下:
path.extname(path)
參數(shù)path:傳入的路徑
代碼示例:
const path = require('path') const fpath = '/a/b/c/index.html' const fext = path.extname(fpath) console.log(fext) // .html
這個(gè)方法與上邊的方法不同的在于提取了后綴名!
解析為絕對(duì)路徑path.resolve()
path.resolve() 該方法將一些的 路徑/路徑段 解析為絕對(duì)路徑,語(yǔ)法格式如下:
path.resolve( [from…],to )
注 :將參數(shù)to位置的字符解析到一個(gè)絕對(duì)路徑里,[from … ]為選填項(xiàng),路徑源;
參數(shù)解讀:
- from : 源路徑
- to : 將被解析到絕對(duì)路徑的字符串
代碼示例:
const path = require('path) path.resolve('/foo/bar', './baz') // returns '/foo/bar/baz' path.resolve('/foo/bar', 'baz') // returns '/foo/bar/baz' path.resolve('/foo/bar', '/baz') // returns '/baz' path.resolve('/foo/bar', '../baz') // returns '/foo/baz' path.resolve('home','/foo/bar', '../baz') // returns '/foo/baz' path.resolve('home','./foo/bar', '../baz') // returns '/home/foo/baz' path.resolve('home','foo/bar', '../baz') // returns '/home/foo/baz' path.resolve('home', 'foo', 'build','aaaa','aadada','../../..', 'asset') //return '/home/foo/asset'
從后向前,若字符以 /
開(kāi)頭,不會(huì)拼接到前面的路徑;若以../
開(kāi)頭,拼接前面的路徑,且不含最后一節(jié)路徑;若連續(xù)出現(xiàn)多個(gè)../../..
或者../..
則忽略前方n(這個(gè)n代表的是出現(xiàn)了幾個(gè)..
)個(gè)..
路徑名進(jìn)行拼接;若以./
開(kāi)頭 或者沒(méi)有符號(hào) 則拼接前面路徑;
返回相對(duì)路徑path.relative(from, to)
path.relative() 方法根據(jù)當(dāng)前工作目錄返回 from 到 to 的相對(duì)路徑。 如果 from 和 to 各自解析到相同的路徑(分別調(diào)用 path.resolve() 之后),則返回零長(zhǎng)度的字符串。
如果將零長(zhǎng)度的字符串傳入 from 或 to,則使用當(dāng)前工作目錄代替該零長(zhǎng)度的字符串。
代碼示例:
const path = require('path') path.relative('/data/orandea/test/aaa', '/data/orandea/impl/bbb'); // 返回: '../../impl/bbb'
該代碼表達(dá)的是對(duì)于from
參數(shù)來(lái)說(shuō),to
參數(shù)的位置是在哪里,通過(guò)解析后得出../../impl/bbb
小結(jié)
node的內(nèi)置模塊中path模塊的實(shí)戰(zhàn)操作在于當(dāng)你需要獲取文件的名稱時(shí)候可以達(dá)到靈活使用的目的,一般情況下我們只需要文章的前四種方法,最后兩種方法是對(duì)path模塊的一個(gè)小拔高
到此這篇關(guān)于Node.js常用三大模塊之path模塊的文章就介紹到這了,更多相關(guān)Node.js path模塊內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
nodejs實(shí)現(xiàn)的http、https 請(qǐng)求封裝操作示例
這篇文章主要介紹了nodejs實(shí)現(xiàn)的http、https 請(qǐng)求封裝操作,結(jié)合實(shí)例形式分析了node.js針對(duì)http、https 請(qǐng)求的封裝與使用相關(guān)操作技巧,需要的朋友可以參考下2020-02-02解決npm管理員身份install時(shí)出現(xiàn)權(quán)限的問(wèn)題
下面小編就為大家分享一篇解決npm管理員身份install時(shí)出現(xiàn)權(quán)限的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-03-03nodejs 實(shí)現(xiàn)MQTT協(xié)議的服務(wù)器端和客戶端的雙向交互的過(guò)程
這篇文章主要介紹了nodejs 實(shí)現(xiàn)MQTT協(xié)議的服務(wù)器端和客戶端的雙向交互的過(guò)程,本文通過(guò)示例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧2023-11-11Nodejs學(xué)習(xí)筆記之Global Objects全局對(duì)象
本文是NodeJS學(xué)習(xí)筆記系列文章的第二篇,從這篇開(kāi)始我們就根據(jù)官方文檔來(lái)逐個(gè)學(xué)習(xí)下NodeJS的各個(gè)模塊,首先我們來(lái)學(xué)習(xí)下Global2015-01-01node.js適合游戲后臺(tái)開(kāi)發(fā)嗎?
這篇文章主要介紹了node.js適合游戲后臺(tái)開(kāi)發(fā)嗎?node.js是不是能代替C++開(kāi)發(fā)游戲后臺(tái)呢?看完本文我想你會(huì)有一定的了解了,需要的朋友可以參考下2014-09-09nodejs socket實(shí)現(xiàn)的服務(wù)端和客戶端功能示例
這篇文章主要介紹了nodejs socket實(shí)現(xiàn)的服務(wù)端和客戶端功能,結(jié)合具體實(shí)例形式分析了nodejs基于socket通信實(shí)現(xiàn)的服務(wù)端與客戶端功能相關(guān)操作技巧,需要的朋友可以參考下2017-06-06Node.js API詳解之 util模塊用法實(shí)例分析
這篇文章主要介紹了Node.js API詳解之 util模塊用法,結(jié)合實(shí)例形式分析了node.js API中util模塊基本功能與相關(guān)函數(shù)使用技巧,需要的朋友可以參考下2020-05-05淺談Node新版本13.2.0正式支持ES Modules特性
這篇文章主要介紹了淺談Node新版本13.2.0正式支持ES Modules特性,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-11-11