path模組包含一系列處理和轉換檔案路徑的工具集,通過 require(`path`) 可用來訪問這個模組。
知識點:對window系統,目錄分隔為“, 對於UNIX系統,分隔符為`/`,針對`..`返回上一級,發現多個斜槓或反斜槓時會替換成一個,/,//,與都被統一轉換為
方法
1、path.resolve([path1], [path2], …)
按照順序依次拼接,獲取的是絕對路徑,路徑末尾的不會帶有路徑分隔符,若合併後的路徑沒有構成一個絕對路徑,則會預設使用當前工作目錄的絕對路徑。
// 拼接路徑中沒有帶有絕對路徑
var _path = path.resolve(`path3`, `path4`, `a/b\cc\`); // 沒有末尾的路徑分隔符
// 結果為:D:others
odeexamplespath3path4acc
// 拼接路徑中帶有絕對路徑
var _path = path.resolve(`D://work/ready/demo`, `path3`, `path4`, `a/b\cc\`);
// 結果為:D:work
eadydemopath3path4acc
<font color=#f00>注意: 其中的D:othersnodeexamples為我的工作路徑,請對應替換自己的路徑檢視</font>
2、path.join([path1], [path2], …)
按照順序,依次拼接路徑、並轉為normalize後的結果路徑,路徑末尾的帶有路徑分隔符。
var _path = path.join(`path1`, `path2\p/cc//`, `/c/../ttt\`);
// 結果為:path1path2pcc tt
3、path.relative()
獲取相對路徑,獲取兩個路徑之間的相對關係。
- from 當前路徑,並且方法返回值是基於from指定到to的相對路徑,路徑末尾的不帶有路徑分隔符
-
to 到哪路徑
var from = `D:\work\server\`, to = `D:/work/ready/demo`; var _path = path.relative(from, to); // 表示從from 到 to的相對路徑 // 結果為:.. eadydemo
4、path.isAbsolute()
獲取絕對路徑,是一個絕對路徑(比如 `E:/abc`或`E:`),或者是以“/”或“”開頭的路徑,二者都會返回true。
console.log(path.isAbsolute(`D:\work\server\`)); // true
console.log(path.isAbsolute(`\work\server`)) // true
console.log(path.isAbsolute(`/temp/../..`)); // true
console.log(path.isAbsolute(`E:/github/nodeAPI/abc/efg`)); // true
console.log(path.isAbsolute(`///temp123`)); // true
console.log(path.isAbsolute(`//temp123`)); // true
5、path.normalize(path)
路徑解析、得到規範化的格式。
var _path = path.normalize(__dirname + `//test/a//b/..//c\`);
// 結果為:D:others
odeexamples estac
6、path.format(pathObject)
該方法用於將一個字串型別的路徑轉化為一個路徑物件(pathObject)。該路徑物件當中包括檔案目錄,檔名,副檔名等。
var _path = path.format(path.format({ root: `E:\`,
dir: `D:\others\node\examples/test`,
base: `util you.mp4`,
ext: `.mp4`,
name: `util you as me`
}
));
// 結果為:D:others
odeexamples/testutil you.mp4
7、path.parse()
該方法用於將一個路徑物件轉化為一個字串型別的路徑(pathString)。
var _path = path.parse(__dirname + `/test/util you.mp3`);
// 結果為:
// { root: `D:\`,
// dir: `D:\others\node\examples/test`,
// base: `util you.mp3`,
// ext: `.mp3`,
// name: `util you`
// }
8、path.dirname()
獲取路徑中目錄結構,不會轉為normalize後的結果路徑。
var _path = path.dirname(__dirname + `/test/hha/util you.mp3`); // 注意/
// 結果為:D:others
odeexamples/test/hha
var _path = path.dirname(__dirname + `/test/hha/`); // 注意/
// 結果為:D:others
odeexamples/test
9、path.basename()
獲取路徑中檔名(.ext則包括字尾名)。
var _path = path.basename(__dirname + `/test/util you.mp3`, `.mp3`);
var _path = path.basename(__dirname + `/test/util you`, `.mp3`);
var _path = path.basename(__dirname + `/test/util you`, `.ext`);
// 結果為:util you
var _path = path.basename(__dirname + `/test/util you.mp3`);
var _path = path.basename(__dirname + `/test/util you.mp3`, ``);
var _path = path.basename(__dirname + `/test/util you.mp3`, `.ext`);
// 結果為:util you.mp3
var _path = path.basename(__dirname + `/test/`, `.mp3`);
// 結果為:test
10、path.extname()
獲取路徑中檔案字尾名。
var _path = path.extname(__dirname + `/test/util you.mp3`);
// 結果為:.mp3
var _path = path.extname(__dirname + `/test/util you`);
// 結果為:為空
屬性
1、path.win32和path.posix
這兩個均為屬性。
path:會根據當前作業系統來確定是使用windows的方式來操作路徑,還是使用linux的方式來操作路徑。
path.win32:允許在任意作業系統上使用windows的方式來操作路徑。
path.posix:允許在任意作業系統上使用linux的方式來操作路徑。
故在windows系統中,path==path.win32,而在linux系統當中,path==path.posix。
console.log(path == path.win32); // true
console.log(path == path.posix); // false
2、path.delimiter
返回作業系統中目錄分隔符,如window是`;`, Unix中是`:`。
console.log(path.delimiter);
// 結果為:;
3、path.sep
返回作業系統中檔案分隔符; window是“, Unix是`/`。
console.log(path.sep);
// 結果為:
console.log(`foo\bar\baz`.split(path.sep));
// [ `foo`, `bar`, `baz` ]
console.log(`foo/bar/baz`.split(path.sep));
// win下返回[`foo/bar/baz`],但在*nix系統下會返回[`foo`,`bar`,`baz`]
參見官方文件