node path模块常用API

108 阅读4分钟

作用

提供了对路径处理的一些功能。

路径规范

  • posix(Linux/macOS)环境下以反斜杠/作为路径分隔符
  • windows 环境中分隔符为正斜杠``

使用前提

引用了 path 模块

const path = require('path');

basename()获取 文件名称

作用

解析一个路径,Node.js 根据操作系统自动适配路径解析逻辑,获得文件的名称及后缀名或者最后一个子路径。在解析前先会自动去除路径最后多余的路径分割符。

应用场景

遍历某个文件夹中所有文件夹时,可获取到每个文件的名称。

语法

基础用法

path.basename(filePath, [suffix])
  • filePath 要解析的文件路径
  • 解析完成后要截取掉的部分,会将结果从后与 suffix 做匹配:
    • 若是与文件名称完整匹配,相当于此参数不传
    • 若是不传递或 suffix 无法匹配 ,则解析出来的文件名会携带 suffix ,反之只会返回除 suffix 之外内容。
const path = require('path');
console.log(path.basename('D:\Desktop\react-18.3.1\a.html'))
console.log(path.basename('D:\Desktop\react-18.3.1\a.html', '.html'))
console.log(path.basename('D:\Desktop\react-18.3.1\a.html', '.htm'))
console.log(path.basename('D:\Desktop\react-18.3.1\', 'eact-18.3.1'))
console.log(path.basename('D:\Desktop\react-18.3.1\', 'react-18.3.1'))
a.html
a
a.html
r
react-18.3.1

跨环境解析路径

在 windows环境下,windows环境的路径以及posix环境的路径都可以解析成功,

但是在posix环境下只能解析成功posix环境的路径,解析 windows 环境的路径会将斜杠当作文件名称中的一部分,导致路径整体返回。

path.basename('C:\temp\myfile.html'); // 返回 'C:\temp\myfile.html'

delimiter 当前环境变量的分隔符

作用

该属性的值为当前环境下环境变量的分割符。

  • windows 环境下为 ;
  • posix 环境下为 :

应用场景

查看用户的环境变量【process.env.PATH】并且想将其分割为列表,每个元素是一个环境变量配置时,可用。

path.sep 默认路径符号

作用

返回当前环境的默认路径符号:

  • windows 中是 \
  • posix是 /

dirname()获取 文件路径

作用

用于获取要解析路径的除了最后一个子路径的所有路径。在解析前先会自动去除路径最后多余的路径分割符。

console.log(path.dirname('D:\Desktop\react-18.3.1\'))
D:\Desktop

extname() 获取后缀名

作用

在解析前先会自动去除路径最后多余的路径分割符。

之后截取到最后一个.以及.之后的内容。若没有则返回空字符串

parse() 转换路径对象

作用

在解析前先会自动去除路径最后多余的路径分割符。

path.parse()方法返回一个对象,其属性表示路径的重要元素。

语法

path.parse(filePath)

返回对象的属性:

  • dir <string>
  • root <string>:绝对路径的根目录
    • Windows 系统:root 为 驱动器号 + 反斜杠(如 C:)。
    • POSIX 系统(Linux/macOS):root 为 单个正斜杠 /
  • base <string>: name 与 ext 的拼接
  • name <string>
  • ext <string>

format() 路径对象转字符串

作用

将一个路径对象解析组合成一个完整的路径字符串

语法

path.format(pathObj)

isAbsolute() 是否是绝对路径

语法

path.isAbsolute(filePath)

返回 boolean 表示该字符串是否为绝对路径

join() 聚合子路径

作用

会使用当前环境特定的路径分隔符,将所有给定的路径片段连接起来,然后对生成的路径进行规范化处理

语法

path.join(...pathParts)

normalize()路径字符串规范化

作用

仅进行字符串处理,不检查路径是否真实存在。

将传入的路径字符串进行格式化:

  • 自动解析 字符串中的 .(当前目录)和 ..(上级目录),生成等效的绝对路径。
/foo/bar//baz/asdf/quux/..
C:\temp\\foo\bar\..\
/foo/bar/baz/asdf
C:\temp\foo\
  • 将连续多个路径分隔符(如 ///\\)替换为单个平台特定分隔符
  • 路径以分隔符结尾(如 /foo/bar/),规范化后仍保留该分隔符。
  • 输入为空字符串时,返回 '.' 表示当前工作目录。

relative() 获取相对路径

作用

比较两个路径,得到后者相对于前者的相对路径

语法

path.relative(from, to)

路径解析逻辑

  • 输入路径会被隐式调用 path.resolve() 转换为绝对路径后再计算相对关系。因此,即使输入是相对路径,也能正确输出相对结果
  • fromto 解析后指向同一路径(调用 path.resolve() 后结果相同),返回空字符串 ''
  • fromto 是空字符串(''),则用当前工作目录替代空字符串参与计算。
  • fromto 不是字符串类型,抛出 TypeError

应用场景

  • 动态生成文件引用路径
 const fromPath = path.resolve('src/components');  
const toPath = path.resolve('src/utils/logger.js');  
const relativePath = path.relative(fromPath, toPath);  
// 返回: '../utils/logger.js'

此结果可用于模块导入(如 import logger from '../utils/logger.js'

  • 构建工具中的路径映射:

在 Webpack 或 Rollup 配置中,结合 path.relative() 可自动生成资源引用路径,减少硬编码

resolve 获取绝对路径

作用

将路径片段合并,像是 join 一样,然后根据当前文件的绝对路径给出合并后路径的绝对路径。

语法

path.resolve(...paths)

其中绿色框住的是当前文件所处文件夹的路径。