path 路径

path 模块提供了用于处理文件和目录的路径的实用工具。

1const path = require('node:path');

path模块在不同的操作系统是有差异的(windows | posix)

windows大家肯定熟悉,posix可能大家没听说过

posix(Portable Operating System Interface of UNIX)

posix表示可移植操作系统接口,也就是定义了一套标准,遵守这套标准的操作系统有(unix,like unix,linux,macOs,windows wsl),为什么要定义这套标准,比如在Linux系统启动一个进程需要调用fork函数,在 windows 启动一个进程需要调用 creatprocess 函数,这样就会有问题,比如我在linux写好了代码,需要移植到 windows 发现函数不统一,posix标准的出现就是为了解决这个问题。

windows 并没有完全遵循 POSIX 标准。windows 在设计上采用了不同于 POSIX 的路径表示方法。

windows 系统中,路径使用反斜杠(\)作为路径分隔符。这与 POSIX 系统使用的正斜杠(/)是不同的。这是 windows 系统的历史原因所致,早期的 Windows 操作系统采用了不同的设计选择。

path.basename()

path.basename(path,[,ext]) 方法返回 path 的最后一部分

  • path <string>:路径
  • ext <string>:可选的扩展名
1path.basename('/foo/bar/baz/asdf/quux.html');
2// 返回: 'quux.html'
3
4path.basename('/foo/bar/baz/asdf/quux.html', '.html');
5// 返回: 'quux'

在posix处理windows路径

:::code:group

1path.basename("C:\\demo\\index.html"); 
2// C:\demo\index.html
1path.basename("C:\\demo\\index.html"); 
2// index.html

:::

当使用 Windows 文件路径时,若要在任何操作系统上获得一致的结果,则使用 path.win32

1log(path.win32.basename("C:\\demo\\index.html")); // index.html
2
3// windows兼容正斜杠的写法
4log(path.win32.basename("/demo/index.html")); // index.html

当使用 POSIX 文件路径时,若要在任何操作系统上获得一致的结果,则使用 path.posix

1// posix处理不了windows的路径
2log(path.posix.basename("C:\\demo\\index.html")); // C:\demo\index.html
3
4log(path.posix.basename("/demo/index.html")); // index.html

path.dirname

这个API用来返回 path 的目录名,和basename正好互补。

1log(path.dirname("/aaaa/bbbb/cccc/index.html")); // /aaaa/bbbb/cccc

path.extname

这个API 用来返回 path 的扩展名

1log(path.extname("/a/b/v/index.html.md"));
2// .md

如果有多个 . 返回最后一个 如果没有扩展名返回空

path.join

这个API 主要是用来拼接路径的

1log(path.join("/a", "/b", "/c"));
2// /a/b/c

可以支持 .. ./ ../操作符

1log(path.join("/a", "/b", "/c", "../"));
2// /a/b/

path.resolve

用于将相对路径解析并且返回绝对路径

1// 如果传入了多个绝对路径,它将返回最后一个
2log(path.presolve("/a", "/b", "/c")); // /c
3
4// 如果只传入相对路径
5log(path.resolve("./index.js")); // /Users/dongxu/Desktop/demo/node-demo/index.js
6
7// 传入绝对路径 + 相对路径
8log(path.resolve(__dirname, "./index.js")); // /Users/dongxu/Desktop/demo/node-demo/index.js

path.parse

用于解析文件路径。它接受一个路径字符串作为输入,并返回一个包含路径各个组成部分的对象

1log(path.parse("/a/b/c/index.html"));
2
3{
4  root: "/",
5  dir: "/a/b/c",
6  base: "index.html",
7  ext: ".html",
8  name: "index",
9}
  • root:路径的根目录,即 /
  • dir:文件所在的目录,即 /a/b/c
  • base:文件名,即 index.html
  • ext:文件扩展名,即 .html
  • name:文件名去除扩展名,即 index

path.format

path.format 和 path.parse 正好互补,format在把对象转回字符串

1log(
2  path.format({
3    root: "/",
4  	dir: "/a/b/c",
5  	base: "index.html",
6  	ext: ".html",
7  	name: "index",
8  })
9);
10// /a/b/c/index.html

path.sep

提供特定于平台的路径片段分隔符:

  • Windows 上是 \
  • POSIX 上是 /
1log(path.posix.sep); // /
2log(path.win32.sep); // \