path
path 模块提供了一些实用工具,用于处理文件和目录的路径。使用时需要引入path模块:
const path = require('path');
基本操作
获取文件名
==path.basename(path[, ext])==
:返回 path 的最后一部分,类似于 Unix 的 basename 命令。 尾部的目录分隔符会被忽略。
path.basename('/目录1/目录2/文件.html');
// 返回: '文件.html'
path.basename('/目录1/目录2/文件.html', '.html');
// 返回: '文件'
basename 会将扩展名视为区分大小写的字符串:
path.win32.basename('C:\\文件.html', '.html');
// 返回: '文件'
path.win32.basename('C:\\文件.HTML', '.html');
// 返回: '文件.HTML'
获取文件目录名
path.dirname(path)
:返回 path 的目录名,类似于 Unix 的 dirname 命令, 尾部的目录分隔符会被忽略。
//第一种:
path.dirname('/目录1/目录2/目录3');
// 返回: '/目录1/目录2'
//第二种:
console.log(__dirname);//直接输出当前文件所在的文件路径
__dirname
:当前模块的目录名,相当于__filename的path.dirname()
__filename
:当前模块的文件名。这是当前的模块文件的绝对路径.
获取文件扩展名
path.extname(path)
:返回 path 的扩展名,即 path 的最后一部分中从最后一次出现 .
字符直到字符串结束。
path.extname('index.html');
// 返回: '.html'
path.extname('index.coffee.md');
// 返回: '.md'
path.extname('index.');
// 返回: '.'
path.extname('index');
// 返回: ''
path.extname('.index');
// 返回: ''
path.extname('.index.md');
// 返回: '.md'
如果在
path
的最后一部分中没有.
,或者如果 path 的基本名称除了第一个字符以外没有.
,则返回空字符串。
路径的格式化
path.format(pathObject)
:从对象返回路径字符串。(即将对象转换为字符串)
path.format({
dir: 'C:\\path\\dir',
base: 'file.txt'
});
// 返回: 'C:\\path\\dir\\file.txt'
path.parse(path)
:返回一个对象,其属性表示 path 的有效元素。(即将字符串转换为对象)
path.parse('C:\\目录1\\目录2\\文件.txt');
// 返回:
// { root: 'C:\\',
// dir: 'C:\\目录1\\目录2',
// base: '文件.txt',
// ext: '.txt',
// name: '文件' }
判断是否是绝对路径
path.isAbsolute(path)
:检测 path 是否为绝对路径。如果给定的 path 是零长度字符串,则返回 false。
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.isAbsolute('.'); // false
拼接路径
path.join([...paths])
:将所有给定的 path 片段连接到一起(使用平台特定的分隔符作为定界符),然后规范化生成的路径。
长度为零的 path 片段会被忽略。 如果连接后的路径字符串为长度为零的字符串,则返回 ‘.
’,表示当前工作目录。
path.join('/目录1', '目录2', '目录3/目录4', '目录5', '..');
// 返回: '/目录1/目录2/目录3/目录4'
..
表示上层路径.
表示当前路径
规范化路径
path.normalize(path)
:规范化给定的 path,解析 ..
和 .
片段。当找到多个连续的路径段分隔字符时则它们将被替换为单个平台特定的路径段分隔符。 尾部的分隔符会保留。
path.normalize('C:\\temp\\\\foo\\bar\\..\\');
// 返回: 'C:\\temp\\foo\\'
由于 Windows 识别多种路径分隔符,因此这些分隔符都将被替换为 Windows 首选的分隔符(\):
path.win32.normalize('C:temp\\\\/\\/\\/foo/bar');
// 返回: 'C:\\temp\\foo\\bar'
计算相对路径
path.relative(from, to)
:根据当前工作目录返回 from 到 to 的相对路径。 如果 from 和 to 各自解析到相同的路径(分别调用 path.resolve() 之后),则返回零长度的字符串。
如果将零长度的字符串传入 from 或 to,则使用当前工作目录代替该零长度的字符串。
path.relative('C:\\orandea\\test\\aaa', 'C:\\orandea\\impl\\bbb');
// 返回: '..\\..\\impl\\bbb'
解析路径地址
path.resolve([...paths])
:将路径或路径片段的序列解析为绝对路径。给定的路径序列会从右到左进行处理,后面的每个 path 会被追加到前面,直到构造出绝对路径。如果在处理完所有给定的 path 片段之后还未生成绝对路径,则会使用当前工作目录。
path.resolve('/目录1/目录2', './目录3');
// 返回: '/目录1/目录2/目录3'
path.resolve('/目录1/目录2', '/目录3/目录4/');
// 返回: '/目录3/目录4'
path.resolve('目录1', '目录2/目录3/', '../目录4/文件.gif');
// 如果当前工作目录是 /目录A/目录B,
// 则返回 '/目录A/目录B/目录1/目录2/目录4/文件.gif'
生成的路径会被规范化,并且尾部的斜杠会被删除(除非路径被解析为根目录)
特殊属性
path.sep
:提供平台特定的路径片段分隔符
- Windows 上是
\
- POSIX 上是
/
在 Windows 上:
'foo\\bar\\baz'.split(path.sep);
// 返回: ['foo', 'bar', 'baz']
在 Windows 上,正斜杠(
/
)和反斜杠(\
)都被接受为路径片段分隔符。 但是, path 方法只添加反斜杠(\
)
path.delimiter
:提供平台特定的路径定界符
;
用于 Windows:
用于 POSIX
在 Windows 上:
console.log(process.env.PATH);
// 打印: 'C:\Windows\system32;C:\Windows;C:\Program Files\node\'
process.env.PATH.split(path.delimiter);
// 返回: ['C:\\Windows\\system32', 'C:\\Windows', 'C:\\Program Files\\node\\']
总结
相对路径和绝对路径的区别
通俗来讲:
相对路径:是从当前路径开始的路径
绝对路径:是从盘符开始的路径
比如C盘ABC文件夹下有两个文件file1和file2,用文件file1表示文件file2的位置,则有两种方式:
第一种:C:\ABC\file2 是绝对路径,指明file文件在C盘ABC文件下,从最大的目录C盘开始表示出来;
第二种:file2就是相对路径,因为file1文件和file2文件都在C:\ABC下,所以它们的路径前面"C:\ABC"都是一样,就不用表示出来了。