1.路径模块(path)
封装了各种路径相关的操作
和Buffer一样,NodeJS中的路径也是一个特殊的模块, 用于处理文件路径和目录路径的实用工具。
不同的是Buffer模块已经添加到Global上了, 所以不需要手动导入
而Path模块没有添加到Global上, 所以使用时需要手动导入
它可以使用以下方式导入:
let path = require("path");
【注意】通过require导入模块时, 如果导入的是自定义模块必须加上路径; 如果导入的是系统模块, 那么就不能加上路径, 只需要写上模块的名称即可。
2.如何使用path
path.basename(path[, ext]) 获取路径的最后一部分
ext
可选的文件扩展名, 可以通过这个参数过滤掉扩展名。
let res1 = path.basename("/foo/bar/baz/asdf/index.html");
console.log(res1); // index.html
let res2 = path.basename("/foo/bar/baz/asdf/index.html", ".html");
console.log(res2); // index
path.dirname(path) 获取当前文件所在文件夹的绝对路径, 类似全局对象属性中的__dirname
let res = path.dirname("/foo/bar/baz/asdf/index.html");
console.log(res); // /foo/bar/baz/asdf
path.extname(path) 获取扩展名称, 从最后一次出现 .
(句点)字符到 path 最后一部分的字符串结束。
如果在 path 的最后一部分中没有.
,或者如果 path 的基本名称除了第一个字符以外没有.
,则返回空字符串。
path.extname('index.html');
// 返回: '.html'
path.extname('index.coffee.md');
// 返回: '.md'
path.extname('index.');
// 返回: '.'
path.extname('index');
// 返回: ''
path.extname('.index');
// 返回: ''
path.isAbsolute(path) 判断是否是绝对路径
区分操作系统
在Linux操作系统中/
开头就是绝对路径
在Linux操作系统中路径的分隔符是左斜杠 /
path.isAbsolute('/foo/bar'); // true
path.isAbsolute('/baz/..'); // true
path.isAbsolute('qux/'); // false
在Windows操作系统中盘符
或者 //
或者 \\
或者 ////
或者\\\\
开头等的都是绝对路径
在Windows操作系统中路径的分隔符是右斜杠 \
右斜杠 \
在Windows中有特殊含义, 所以一般用两个右斜杠 \\
做分隔符
path.isAbsolute('//server'); // true
path.isAbsolute('\\server'); // true
path.isAbsolute('////server'); // true
path.isAbsolute('\\\\server'); // true
path.isAbsolute('C:/foo/..'); // true
path.isAbsolute('C:\\foo\\..'); // true
path.isAbsolute('bar\\baz'); // false
path.isAbsolute('bar/baz'); // false
path.sep 用于获取当前操作系统中路径的分隔符
Linux上是左斜杠 /
Windows 上是右斜杠\
。
path.delimiter 用于获取当前操作系统环境变量的分隔符
Linux上是冒号 :
Windows 上是分号;
。
path.parse(path) 用于将路径转换为对象
let obj = path.parse('/home/user/dir/file.txt');
console.log(obj);
打印
{
root: '/',
dir: '/home/user/dir',
base: 'file.txt',
ext: '.txt',
name: 'file'
}
path.format(pathObject) 用于将对象转换为路径 与 path.parse()
相反
let obj = {
root: '/',
dir: '/home/user/dir',
base: 'file.txt',
ext: '.txt',
name: 'file'
};
let str = path.format(obj);
console.log(str);
打印
/home/user/dir/file.txt
path.join([...paths]) 用操作系统特定的分隔符拼接路径
如果参数中没有添加斜杠/
, 那么该方法会自动添加
我现在用的是Windows操作系统, 所以添加分隔符是右斜杠\
let str = path.join('/foo', 'bar', 'baz/asdf', 'quux');
console.log(str); // 打印 \foo\bar\baz\asdf\quux
【注意】
如果参数中出现'..'
, 那么会自动跳转到前面路径的上一级路径
如果参数中出现'../..'
, 那么会自动跳转到前面路径的上一级路径的上一级路径, 以此类推
path.join('/foo', 'bar', 'baz/asdf', 'quux', '..'); //打印 \foo\bar\baz\asdf
path.join('/foo', 'bar', 'baz/asdf', 'quux', '../..'); //打印 \foo\bar\baz
path.join('/foo', 'bar', 'baz/asdf', 'quux', '../..', 'abcd'); //打印 \foo\bar\baz\abcd
path.normalize(path) 用于规范化路径
由于 Windows 识别多种路径分隔符, 路径中可能有多个斜杠, 这些分隔符都将被替换为 Windows 首选的分隔符(\
):
let str = path.normalize('C:\\temp\\foo\\\bar\\\\..\\');
console.log(str);
打印
C:\temp\foo\
path.relative(from, to) 用于计算相对路径
根据第一个参数找到第二个参数的相对路径
例如
第一个参数: C:\orandea\test\aaa
第二个参数: C:\orandea\impl\bbb
从第一个参数的路径怎么才能到达第二个参数的路径?
首先找到两个路径的相同部分, 这里两个路径中都有orandea
, 所以会从第一个参数中执行..\
C:\orandea\test\aaa ->..\
->C:\orandea\test
再执行..\再找到上一级路径
C:\orandea\test\aaa ->..\
->C:\orandea\test->../
->C:\orandea
最后才能在orandea文件夹下找到 impl\bbb
所以经过的过程就是..\..\impl\bbb
let res = path.relative('C:\\orandea\\test\\aaa', 'C:\\orandea\\impl\\bbb');
console.log(res);
打印
..\..\impl\bbb
path.resolve([...paths]) 用于将路径或路径片段的序列解析为绝对路径。
给定的路径序列从右到左进行处理,每个后续的 path 前置,直到构造出一个绝对路径。
例如
path.resolve('/foo/bar', './abc');
// 返回: '/foo/bar/abc'
path.resolve('/foo/bar', '../abc');
// 返回: '/foo/abc'
【注意】如果后面的参数中有绝对路径, 那么前面的参数都会被忽略
例如
path.resolve('/foo/bar', '/tmp/file/');
// 返回: '/tmp/file'
参考自官网文档