本文同步自我的個(gè)人博客:http://www.52cik.com/2015/12/04/learn-node-path.html
path 模塊是 node 用于整理、轉(zhuǎn)換、合并路徑的神器,只要是路徑問題,都可以交給它處理。
但它僅僅是處理路徑字符串,而不會(huì)去堅(jiān)持或處理文件。
path.normalize
路徑整理做項(xiàng)目時(shí),往往都是基于相對(duì)路徑,于是經(jīng)常會(huì)出現(xiàn)類似這樣的路徑 path//upload/../file/./123.jpg
。
當(dāng)然這個(gè)是把所有坑都寫到一起了,不過就算這樣的路徑,path.normalize
分分鐘搞定。
path.join
拼接路徑那些奇葩路徑往往都是自己拼接導(dǎo)致的,如果用一些工具幫助我們處理這,就可以直接得到規(guī)范的路徑了,而且不需要擔(dān)心跨平臺(tái)問題。這里的 path.join
就可以幫助我們生產(chǎn)跨平臺(tái),規(guī)范化的路徑字符串。
var path = require('path');var str = path.join('./path/./', './upload', '/file', '123.jpg');console.log(str); // path/upload/file/123.jpgvar str = path.join('path', 'upload', 'file', '123.jpg');console.log(str); // path/upload/file/123.jpgvar arr = ['path', 'upload', 'file', '123.jpg'];var str = path.join.apply(null, arr);console.log(str); // path/upload/file/123.jpg
這個(gè)方法雖然方便,但是參數(shù)只能是字符串,否則會(huì)拋出錯(cuò)誤(0.10以上版本)。
path.resolve
絕對(duì)路徑這個(gè)絕對(duì)路徑操作,跟上面的不太一樣,如果你懂命令行 cd
命令,那就秒懂了,否則需要花點(diǎn)時(shí)間多跑幾個(gè)例子才能理解。這次直接上官方例子。
相當(dāng)于命令行下的
cd foo/barcd /tmp/file/cd ..cd a/../subfilepwd
他的解析不是在是簡(jiǎn)單的拼接關(guān)系,而是類似 cd
命令的解析了。
path.relative
相對(duì)路徑有絕對(duì)就有相對(duì),有時(shí)我們有兩個(gè)絕對(duì)路徑, 我們需要從中找出相對(duì)目錄的起源目錄。
path.dirname
文件路徑根據(jù)一個(gè)文件或目錄得到它所在的目錄路徑,這個(gè)很常用。
path.basename
獲取路徑中的文件名確切的說是返回最后一個(gè)路徑分割后面的文件名,不論是文件還是目錄,第二個(gè)參數(shù)可以忽略文件后綴。
var path = require('path');var str = path.basename('path/upload/file/123.txt.jpg');console.log(str); // 123.txt.jpgvar str = path.basename('path/upload/file/123.txt.jpg', '.jpg');console.log(str); // 123.txtvar str = path.basename('path/upload/file/123.txt.jpg', '.txt.jpg');console.log(str); // 123var str = path.basename('path/upload/file/');console.log(str); // file
代碼都是簡(jiǎn)單易懂的。
path.extname
文件后綴確切說,就是返回最后一個(gè) .
之后的字符串,沒有則返回空。
path.parse
解析路徑把一個(gè)路徑解析為一個(gè) {root:'', dir:'', base:'', ext:'', name:''}
這樣的對(duì)象。
有時(shí)候要獲取文件名,文件后綴,文件目錄,這樣到省事了,直接搞定。上官方例子。
path.format
生成路徑正好跟 path.parse
相反,這個(gè)則是根據(jù) {root:'', dir:'', base:'', ext:'', name:''}
這樣的對(duì)象來生成字符串。上官方例子。
還有一些屬性,如 path.sep
不同平臺(tái)下的文件路徑分隔符,win 是 \\
,*nix 則是 /
。path.delimiter
字面解釋,這才是分隔符,但這個(gè)往往是環(huán)境變量中出現(xiàn)的,win 是 ;
,*nix 則是 :
,你們懂的。
還有兩個(gè)奇葩屬性,path.posix
和 path.win32
他們都包含上面這些方法屬性,前者跨平臺(tái),后者只是win上。
不知道為什么要單獨(dú)搞兩個(gè)這樣的屬性。
好了,爭(zhēng)取每天學(xué)習(xí)一點(diǎn)基礎(chǔ),只有把這些基礎(chǔ)知識(shí)梳理一遍,才能更好的掌握 node。
聯(lián)系客服