前言
node.js的path模块是Node.js的内置的路径处理模块,在我们日常开发中经常使用,有的时候也会和fs模块一起使用。
path模块
path的模块的功能主要分为获取路径信息和处理路径。
1. 获取路径信息
其中获取路径信息又包括获取路径的目录名,获取路径的基础名称,获取路径的后缀名,以及获取操作系统的路径分隔符。
1.1 获取路径的目录名
获取目录名是使用path的dirname方法
语法
path.dirname(path)
- path: string, 表示路径
示例
const path = require('path');
const data = path.dirname('./index.js');
console.log('文件的目录名', data);
const data1 = path.dirname('/path/index.js');
console.log('文件的目录名', data1);
效果如下:
dirname方法是直接根据参数来解析出目录名的,不会将../或./这种相对符的路径进行解析。
1.2 获取路径的基础名称
获取路径的基础名称是使用path模块的basename方法。
语法
path.basename(path[, ext])
- path: string, 表示路径
- ext: string, 可选的文件扩展名
示例
const data = path.basename('./index.js');
console.log('文件的基础名称', data);
const data1 = path.basename('/path/index.js');
console.log('文件的基础名称', data1);
效果如下:
1.3 获取路径的后缀名
获取文件的后缀名也叫做获取文件的扩展名,是使用path的extname方法来获取
语法
path.extname(pat)
- path: string, 表示路径
示例
const data = path.extname('./index.js');
console.log('文件的扩展名', data);
const data1 = path.extname('/path/index.js');
console.log('文件的扩展名', data1);
效果如下:
1.4 获取操作系统的路径分隔符
不同平台的路径分隔符是不一样的,比如在windows中一般都是/,在linux上一般都是\。获取操作系统的路径分隔符是使用path的sep方法。
语法
path.sep()
示例
const data = path.basename('./index.js');
console.log('文件的基础名称', data);
const data1 = path.basename('/path/index.js');
console.log('文件的基础名称', data1);
效果如下:
2. 处理路径信息
处理路径信息的功能主要分为解析路径并返回对象和拼接路径
2.1 解析路径并返回对象
解析路径并返回对象主要用到的是path的parse方法
语法
path.parse(path)
- path: string, 表示路径
示例
const paseObj = path.parse('./index.js');
console.log('解析文件', paseObj);
const paseObj1 = path.parse('/path/index.js');
console.log('解析文件', paseObj1);
效果如下:
用不同的路径表示的同一个文件解析出来的对象内容是不同的
2.2 拼接路径
拼接路径主要有两种方法实现。path的resolve方法和path.join方法
2.2.1 path.resolve()
将路径或路径片段的序列解析为绝对路径。返回的路径是从右往左处理,后面的每个 myPath 被依次解析,直到构造出一个完整的绝对路径。
语法
path.resolve([...paths])
- ...paths:string, 一个路径片段的序列
示例
const pathArr = ['/path/test', 'index', 'test.txt'];
const data = path.resolve(...pathArr);
console.log('拼接的路径', data);
效果如下:
2.2.2 path.join()
使用平台特定的分隔符作为定界符将所有给定的 path 片段连接在一起,然后规范化生成的路径。
语法
path.join([...paths])
- ...paths:string, 一个路径片段的序列
示例
const pathArr = ['/path/test', 'index', 'test.txt'];
const data = path.join(...pathArr);
console.log('拼接的路径', data);
效果如下:
2.2.3 两者的区别
- 它们都可以拼接成一个完整路径.
- join方法是直接将路径的字符串进行拼接,这有点类似于数组的join方法,而resolve是会根据路径的情况进行解析之后再拼接的
- 如果目录名是以./或../这种不加/开头的话,resolve 会找到磁盘下的根目录
- 如果文件的基础名称是以/开头的,resolve 就会直接返回 basename
const pathArr = ['/path/test', '/index', 'test.txt'];
const data = path.resolve(...pathArr);
console.log('拼接的路径', data);
const data1 = path.join(...pathArr);
console.log('拼接的路径', data1);
效果如下:
3. 常用的路径常量
下面几个是path模块中常用的几个路径常量
- __dirname:这是一个常量,表示:当前执行文件所在完整目录。
- __filename:这是一个常量。表示:当前执行文件的完整目录 + 文件名。
- process.cwd:获取当前执行 Node命令 时的目录名。
console.log('__dirname', __dirname);
console.log('__filename', __filename);
console.log('process.cwd', process.cwd());
效果如下:
想了解更多关于path模块的内容,请查阅Node官网