我们知道Windows和Linux操作系统的文件路径格式有很多不同,比如:Windows使用反斜杠\
而Linux使用正斜杠/
,Windows有c
、d
、e
等盘符而Linux文件系统只有一个根节点/
。Node.js提供了核心模块path
实现文件路径的拼接等操作,该模块内部处理了不同操作系统之间的差异,此外它也可以用于HTTP
的URL等路径的拼接。
path.join()
方法能够实现路径拼接,并自动针对操作系统平台进行对应的转换。
const path = require('path');
const filepath = path.join(__dirname, "a.txt");
console.log(filepath);
上面例子代码中,__dirname
是一个表示当前目录的变量,这里我们使用path.join()
对两个字符串进行拼接,Windows下会输出例如E:\workspace-me\demonode\a.txt
的字符串;如果使用Linux等操作系统则会转换成对应平台规范的文件路径。
这里第二个参数如果输入/a.txt
等形式,path.join()
也是可以正确处理的,它对于这种边缘情况有着良好的支持。
上面path
模块对于路径拼接模式是自动识别的,我们也可以手动指定拼接的模式。
const path = require('path');
const filepath = path.posix.join('/etc', 'nginx', 'site-available');
console.log(filepath);
上面代码我们指定了posix
拼接模式,因此无论使用什么操作系统都会输出/etc/nginx/site-available
。
path
模块还常用于提取文件名、扩展名、基础路径等用途,下面是一个例子。
const path = require('path');
const fileinfo = path.parse('e:/workspace-me/demo/a.txt');
console.log(fileinfo);
上面代码返回值是一个对象,内容如下:
{
root: 'e:/',
dir: 'e:/workspace-me/demo',
base: 'a.txt',
ext: '.txt',
name: 'a'
}
实际开发中,我们可以很方便的从该对象中提取出文件路径相关的重要信息。此外,path
模块也支持path.extname()
、path.basename()
等方法用于单独获取这些信息,具体可以参考文档。
path.relative()
方法可以很方便的计算相对路径。
const path = require('path');
const basepath = 'http://myblog/resources/js/';
const filepath = 'http://myblog/1.png';
const relativepath = path.relative(basepath, filepath);
console.log(relativepath);
path.relative()
方法会返回第二个参数路径相对于第一个参数路径的相对值,上面例子输出结果为../../1.png
。