来聊聊NodeJS的path模块

Node.js 的 path 模块提供了一些用于处理文件路径的小工具

先简单的看一下path模块提供的方法

方法描述
normalize(p: string): string;规范化路径,处理‘.’‘..’
join(…paths: string[]): string;连接路径,自动判断当前系统路径分隔符,Unix系统‘/’,Windows系统‘\’
resolve(…pathSegments: string[]): string;最后一个参数为{to},其他参数为一个{from}数组。将to参数解析为绝对路径,传入的参数会从右往左处理
isAbsolute(p: string): boolean;判断参数path是否是绝对路径。
relative(from: string, to: string): string;返回从{from}到{to}的相对路径
dirname(p: string): string;返回路径中代表文件夹的部分,类似Unix的dirname命令
basename(p: string, ext?: string): string;返回路径中的最后一部分。类似Unix的bashname命令
extname(p: string): string;返回路径中的文件后缀名,例如: /a/b/path.js 返回.js,如果路径中不包含‘.’或该路径只包含一个‘.’ 且这个‘.’为路径的第一个字符,则返回空字符串,如果这个‘.’为最后一个字符,则返回‘.’
parse(p: string): ParsedPath;返回路径字符串的对象
format(pP: FormatInputPathObject): string;从对象中返回规范化路径,和parse()相反
toNamespacedPath(path: string): string;返回给定路径的等价名称空间前缀路径,如果输入的不是字符串则返回path字符串,在其他操作系统上执行永远返回path字符串[仅在Windows系统上]
属性描述
path.sep返回操作系统的路径分隔符,/ \ \\
path.delimiter返回操作系统的文件分隔符。; :
path.posix提供上述 path 的方法及属性,总是以 posix 兼容的方式交互
path.win32提供上述 path 的方法,总是以 win32 兼容的方式交互
COPY
1
2
3
4
5
6
var path = require("path")

// __filename 当前文件路径

console.log("当前文件所在路径",__filename); // 返回当前文件所在路径
// 当前文件所在路径 D:\path\path.js
COPY
1
2
console.log("normalize():",path.normalize("../test1/./test2/../test3///")); // 规范化路径
// normalize(): ..\test1\test3\
COPY
1
2
console.log("join():",path.join("/test1", "test2", "test3/test4", "../test5", "..","test6/")); // 连接路径
// join(): \test1\test2\test3\test6\
COPY
1
2
console.log("resolve():", path.resolve(".//test1", "test2", "test3/test4", "../test5", "..","test6/")); // 获取绝对路径(一般情况下只会传入一个值,来获取绝对路径)
// resolve(): D:\path\test1\test2\test3\test6
COPY
1
2
3
4
5
6
console.log("isAbsolute():",path.isAbsolute("../test1/test2"));// 判断是否是绝对路径
console.log("isAbsolute():",path.isAbsolute("/test1/test2"));
/*
isAbsolute(): false
isAbsolute(): true
*/
COPY
1
2
console.log("relative",path.relative("/test1/test2","/test3/test4")); // 获取相对路径(一般情况下只会传入一个值,来获取相对路径)
// relative ..\..\test3\test4
COPY
1
2
console.log("dirname",path.dirname("/test1/test2/test3")); // 返回路径的文件夹部分(test3被视为无后缀名的文件,所有只返回了test1和test2)
// dirname /test1/test2
COPY
1
2
console.log("basename():",path.basename("/test1/tets2/test3"));//返回路径的最后一部分,通常用于从完全限定路径中提取文件名
// basename(): test3
COPY
1
2
console.log("extname():",path.extname("/path2.js")); // 获取路径中的文件后缀名
// extname(): .js
COPY
1
2
3
4
5
6
7
8
9
10
console.log("parse():",path.parse(__filename));// 返回路径字符串的对象
/*
parse(): {
root: 'D:\\',
dir: 'D:\\path',
base: 'path.js',
ext: '.js',
name: 'path'
}
*/
COPY
1
2
3
let this_file_path = path.parse(__filename)
console.log("format():",path.format(this_file_path)); // 与parse相反
// ormat(): D:\path\path.js
COPY
1
2
console.log("toNamespacedPath():",path.toNamespacedPath(__filename));
// toNamespacedPath(): \\?\D:\path\path.js
COPY
1
2
console.log("path.sep:",path.sep); // 返回操作系统的路径分隔符,`/` `\` `\\`
// path.sep: \
COPY
1
2
console.log("path.delimiter:",path.delimiter); // 返回操作系统的文件分隔符。`;` `:`
// path.delimiter: ;
COPY
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
console.log("path.posix:",path.posix); // 提供上述 path 的方法及属性,总是以 posix 兼容的方式交互
/*
path.posix: {
resolve: [Function: resolve],
normalize: [Function: normalize],
isAbsolute: [Function: isAbsolute],
join: [Function: join],
relative: [Function: relative],
toNamespacedPath: [Function: toNamespacedPath],
dirname: [Function: dirname],
basename: [Function: basename],
extname: [Function: extname],
format: [Function: bound _format],
parse: [Function: parse],
sep: '/',
delimiter: ':',
win32: {
resolve: [Function: resolve],
normalize: [Function: normalize],
isAbsolute: [Function: isAbsolute],
join: [Function: join],
relative: [Function: relative],
toNamespacedPath: [Function: toNamespacedPath],
dirname: [Function: dirname],
basename: [Function: basename],
extname: [Function: extname],
format: [Function: bound _format],
parse: [Function: parse],
sep: '\\',
delimiter: ';',
win32: [Circular],
posix: [Circular],
_makeLong: [Function: toNamespacedPath]
},
posix: [Circular],
_makeLong: [Function: toNamespacedPath]
}
*/
COPY
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
console.log("path.win32:",path.win32); // 提供上述 path 的方法,总是以 win32 兼容的方式交互
/*
path.win32: {
resolve: [Function: resolve],
normalize: [Function: normalize],
isAbsolute: [Function: isAbsolute],
join: [Function: join],
relative: [Function: relative],
toNamespacedPath: [Function: toNamespacedPath],
dirname: [Function: dirname],
basename: [Function: basename],
extname: [Function: extname],
format: [Function: bound _format],
parse: [Function: parse],
sep: '\\',
delimiter: ';',
win32: [Circular],
posix: {
resolve: [Function: resolve],
normalize: [Function: normalize],
isAbsolute: [Function: isAbsolute],
join: [Function: join],
relative: [Function: relative],
toNamespacedPath: [Function: toNamespacedPath],
dirname: [Function: dirname],
basename: [Function: basename],
extname: [Function: extname],
format: [Function: bound _format],
parse: [Function: parse],
sep: '/',
delimiter: ':',
win32: [Circular],
posix: [Circular],
_makeLong: [Function: toNamespacedPath]
},
_makeLong: [Function: toNamespacedPath]
}
*/
COPY
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
// 本文完整path.js内容

const path = require("path")

// __filename 当前文件路径

console.log("当前文件所在路径",__filename); // 返回当前文件所在路径

console.log("normalize():",path.normalize("../test1/./test2/../test3///")); // 规范化路径

console.log("join():",path.join("/test1", "test2", "test3/test4", "../test5", "..","test6/")); // 连接路径

console.log("resolve():", path.resolve(".//test1", "test2", "test3/test4", "../test5", "..","test6/")); // 获取绝对路径(一般情况下只会传入一个值,来获取绝对路径)

console.log("isAbsolute():",path.isAbsolute("../test1/test2"));// 判断是否是绝对路径
console.log("isAbsolute():",path.isAbsolute("/test1/test2"));

console.log("relative",path.relative("/test1/test2","/test3/test4")); // 获取相对路径(一般情况下只会传入一个值,来获取相对路径)

console.log("dirname",path.dirname("/test1/test2/test3")); // 返回路径的文件夹部分(test3被视为无后缀名的文件,所有只返回了test1和test2)

console.log("basename():",path.basename("/test1/tets2/test3"));//返回路径的最后一部分,通常用于从完全限定路径中提取文件名

console.log("extname():",path.extname("/path2.js")); // 获取路径中的文件后缀名

console.log("parse():",path.parse(__filename));// 返回路径字符串的对象

let this_file_path = path.parse(__filename)
console.log("format():",path.format(this_file_path)); // 与parse相反

console.log("toNamespacedPath():",path.toNamespacedPath(__filename));


console.log("path.sep:",path.sep); // 返回操作系统的路径分隔符,`/` `\` `\\`

console.log("path.delimiter:",path.delimiter); // 返回操作系统的文件分隔符。`;` `:`

console.log("path.posix:",path.posix); // 提供上述 path 的方法及属性,总是以 posix 兼容的方式交互

console.log("path.win32:",path.win32); // 提供上述 path 的方法,总是以 win32 兼容的方式交互

Authorship: Lete乐特
Article Link: https://blog.imlete.cn/article/node-path.html
Copyright: All posts on this blog are licensed under the CC BY-NC-SA 4.0 license unless otherwise stated. Please cite Lete乐特 's Blog !