使用node path获取路径模块


1.path.join() 路径拼接

将多个路径片段拼接成一个完整的路径字符串

2.path.basename() 获取路径中的文件名

可以获取路径中的最后一部分,经常通过这个方法获取路径中的文件名

语法:

path.basename(path[,ext]) ,返回路径中的最后一部分

  • path:必选参数,表示一个路径的字符串
  • ext:可选参数,表示文件扩展名
const firstPath = "d:\\name.wav";
path.basename(firstPath); //name.wav
path.basename(firstPath, path.extname(firstPath)); //name
path.extname(firstPath); //.wav

3.path.extname() 获取路径的扩展名

语法:
path.extname(path)

4.path.dirname(path) 获取路径

用于获取路径中的目录, 也就是除了最后一个部分以外的内容

5.path.isAbsolute(path) 判断是否是绝对路径

isAbsolute用于判断路径是否是一个绝对路径

区分操作系统

  • 在 Linux 操作系统中/开头就是绝对路径
  • 在 Windows 操作系统中盘符开头就是绝对路径
  • 在 Linux 操作系统中路径的分隔符是 左(正)斜杠 /
  • 在 Windows 操作系统中路径的分隔符是 右(反)斜杠 \

7.path.delimiter 获取当前操作系统中环境变量的分隔符

path.delimiterNode.js 中的一个只读属性,非函数

如果是在 Linux 操作系统中运行那么获取到的是 :;例:/usr/local/bin:/usr/bin:/bin
如果是在 Windows 操作系统中运行那么获取到的是 ;;例C:\Program Files\Node.js\;C:\Windows\System32

8.path.sep 获取当前操作系统路径的分隔符

path.sepNode.js 中的一个只读属性,非函数

如果是在 Linux 操作系统中运行那么获取到的是 左(正)斜杠 /
如果是在 Windows 操作系统中运行那么获取到的是 右(反)斜杠 \

9.path.parse() 将一个路径字符串解析成一个对象

用于将一个路径字符串解析成一个对象,该对象包含了路径的各个组成部分。

返回对象的属性

  • root:根目录。在 Unix/Linux 系统中,通常是 /;在 Windows 系统中,通常是盘符加上根目录的反斜杠,如 C:\
  • dir:目录名(不包括文件名)。这是路径中最后一个 /\(在 Windows 上)之前的部分。
  • base:文件名(包含扩展名)。这是路径中最后一个 /\(在 Windows 上)之后的部分。
  • ext:文件的扩展名,包括点(.)。如果路径中没有扩展名,则为空字符串。
  • name:文件名(不包含扩展名)。这是 base 属性去掉 ext 属性后的部分。
const path = require("path");

const parsed1 = path.parse("/home/user/dir/file.txt");
console.log(parsed1);
/* 输出:  
{  
  root: '/',  
  dir: '/home/user/dir',  
  base: 'file.txt',  
  ext: '.txt',  
  name: 'file'  
}  
*/

const parsed2 = path.parse("C:\\path\\dir\\index.html");
console.log(parsed2);
/* 输出:  
{  
  root: 'C:\\',  
  dir: 'C:\\path\\dir',  
  base: 'index.html',  
  ext: '.html',  
  name: 'index'  
}  
*/

注意事项

  • path.parse 方法在处理路径时,会忽略尾部的目录分隔符。
  • 在 Windows 系统上,正斜杠(/)和反斜杠(\)都可以作为路径分隔符,但在返回值中,路径分隔符会被统一为反斜杠(\)。

10.path.format() 用于将对象转换成路径

用法

const pathString = path.format(pathObject);

pathObject 对象的属性

  • dir(可选):目录路径。这是路径中最后一个 /\(在 Windows 上)之前的部分。
  • base(可选):文件名(包含扩展名)。如果同时提供了 nameext,则 base 会被忽略。
  • name(可选):文件名(不包含扩展名)。如果同时提供了 base,则 name 会被忽略。
  • ext(可选):文件的扩展名,包括点(.)。如果同时提供了 base,则 ext 会被忽略。
  • root(可选):根目录。在 Unix/Linux 系统中,通常是 /;在 Windows 系统中,通常是盘符加上根目录的反斜杠,如 C:\。如果提供了 dir,则 root 会被忽略,除非 dir 是相对于 root 的。
const path = require("path");

const myPath = path.format({
    dir: "/home/user/docs",
    base: "file.txt",
});

console.log(myPath); // 输出: /home/user/docs/file.txt

const myPath2 = path.format({
    root: "/",
    name: "index",
    ext: ".html",
});

console.log(myPath2); // 输出: /index.html

const myPath3 = path.format({
    dir: "C:\\Users\\Name\\Documents",
    name: "report",
    ext: ".pdf",
});

console.log(myPath3); // 输出: C:\Users\Name\Documents\report.pdf

注意事项

  • 如果同时提供了 basename/ext,则 base 会覆盖 nameext
  • 如果提供了 dirroot,且 dir 不是相对于 root 的绝对路径,则 root 可能会被忽略。
  • 在 Windows 系统上,路径分隔符会被统一为反斜杠(\),但在对象中你可以使用正斜杠(/)作为分隔符,path.format 方法会自动转换。

11.path.normalize() 规范化路径

用于将路径字符串规范化为标准的格式。这个方法会处理路径中的冗余分隔符、相对路径标识符(如 . 和 ..),以及平台特定的路径分隔符差异。

说明

  • 冗余分隔符:连续的多个分隔符会被替换为单个分隔符。例如,foo//bar 会被规范化为 foo/bar
  • 相对路径标识符
    • . 表示当前目录,会被移除。例如,foo/./bar 会被规范化为 foo/bar
    • .. 表示上级目录,会被适当地解析。例如,foo/bar/../baz 会被规范化为 foo/baz
  • 平台特定分隔符:在 Windows 系统上,路径分隔符可能是反斜杠(\),而在 Unix/Linux 系统上,路径分隔符是正斜杠(/)。path.normalize 会根据 Node.js 运行的平台来处理这些差异,但通常会将所有分隔符转换为正斜杠(/),除非在 Windows 系统上且使用了 path.win32.normalize
const path = require("path");

const p1 = path.normalize("/foo//bar/baz//qux/");
console.log(p1); // 输出: /foo/bar/baz/qux

const p2 = path.normalize("foo/./bar/../baz");
console.log(p2); // 输出: foo/baz

// 在 Windows 系统上
const p3 = path.win32.normalize("C:\\foo\\bar\\..\\baz\\");
console.log(p3); // 输出: C:\foo\baz (注意这里仍然使用了反斜杠)

// 但如果你想要在所有平台上都使用正斜杠,可以这样做:
const p4 = path.normalize("C:\\foo\\bar\\..\\baz\\").replace(/\\/g, "/");
console.log(p4); // 输出: C:/foo/baz

12.path.relative(from, to) 计算相对路径

用于计算从 from 路径到 to 路径的相对路径。这个方法非常有用,尤其是在你需要生成从一个目录到另一个目录的引用时,而不希望使用绝对路径。
用法

const relativePath = path.relative(from, to);
  • from 是一个字符串,表示起始路径。
  • to 是一个字符串,表示目标路径。
  • relativePath 是一个字符串,表示从 fromto 的相对路径。

说明

  • path.relative 会计算从 fromto 的最短路径,并返回一个字符串,该字符串表示这个相对路径。
  • 如果 fromto 指向相同的路径或文件,则返回一个空字符串(在某些 Node.js 版本中可能是 .,表示当前目录)。
  • 如果 to 路径是 from 路径的父级或更上级的路径,则返回的相对路径中可能包含 ..(表示上级目录)。
const path = require("path");

const relative1 = path.relative("/data/orandea/test/aaa", "/data/orandea/impl/bbb");
console.log(relative1); // 输出: '../impl/bbb'

const relative2 = path.relative("/data/demo", "/data/demo");
console.log(relative2); // 输出: '' (在某些 Node.js 版本中可能是 '.')

const relative3 = path.relative("/foo/bar", "/foo/bar/baz/qux");
console.log(relative3); // 输出: 'baz/qux'

注意事项

  • path.relative 生成的路径是基于字符串操作的,它不会检查文件系统上的实际路径是否存在。
  • 在处理 Windows 路径时,path.relative 会自动处理平台特定的路径分隔符(如使用反斜杠 \),但返回的相对路径通常使用正斜杠 / 作为分隔符,除非你在 Windows 系统上并且明确希望使用 path.win32.relative
  • 如果 fromto 路径包含符号链接(symlinks),path.relative 不会解析这些符号链接,而是将它们视为普通路径的一部分。

13.path.resolve([…paths]) 解析路径

用于将路径或路径片段的序列解析为绝对路径。这个方法会按照从左到右的顺序处理提供的路径片段,直到构造出一个绝对路径。如果提供的路径片段中有 ... 这样的相对路径指示符,path.resolve 也会相应地解析它们。

用法

const resolvedPath = path.resolve([...paths]);

说明

  • 如果提供的路径片段中的第一个是绝对路径,则 path.resolve 会直接使用这个绝对路径作为基础,并忽略任何之前的路径片段。
  • 如果提供的路径片段中没有绝对路径,则 path.resolve 会使用当前工作目录(process.cwd() 返回的路径)作为基础路径。
  • path.resolve 会处理 .(表示当前目录)和 ..(表示上级目录)这样的相对路径指示符。
  • 最终返回的路径是一个绝对路径,并且所有的路径分隔符都会被标准化为平台特定的分隔符(在 Unix/Linux 上是正斜杠 /,在 Windows 上通常是反斜杠 \,但 Node.js 的 API 通常返回使用正斜杠的路径)。
const path = require("path");

// 假设当前工作目录是 /home/user
const p1 = path.resolve("./subdir", "file.txt");
console.log(p1); // 输出: /home/user/subdir/file.txt

const p2 = path.resolve("/etc", "config", "file.conf");
console.log(p2); // 输出: /etc/config/file.conf

const p3 = path.resolve("..", "file.txt");
console.log(p3); // 输出: /home/file.txt

// 在 Windows 系统上
const p4 = path.win32.resolve("C:", "Users", "Name", "file.txt");
console.log(p4); // 输出: C:\Users\Name\file.txt (注意这里使用了反斜杠)

注意事项

  • path.resolve 不会检查文件系统上的实际路径是否存在。它只是基于提供的路径片段和当前工作目录来计算绝对路径。
  • 在处理 Windows 路径时,如果你希望使用反斜杠作为路径分隔符,并且你的 Node.js 应用在 Windows 系统上运行,你可以使用 path.win32.resolve 而不是 path.resolve。不过,大多数情况下,Node.js 的 API 和工具都能很好地处理使用正斜杠的路径。

注意点: 如果后面的参数是绝对路径, 那么前面的参数就会被忽略


文章作者: 弈心
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 弈心 !
评论
  目录