Skip to content

path 模块

path 模块提供了用于处理文件和目录路径的实用功能,帮助开发者在不同操作系统之间处理文件路径时保持一致性。

__filename & __dirname

虽然在 ESM 语法下,不存在 __filename__dirname 全局变量,但是可以通过如下方式获取:

js
import.meta.filename // C:\Users\xxx\src\main.js
import.meta.dirname // C:\Users\xxx\src
import.meta.url // file://C:/Users/xxx/src/main.js
js
import { fileURLToPath, URL } from 'node:url'
import path from 'node:path'

// 最佳实践:先将 URL 转换为文件系统路径
// => __filename
fileURLToPath(import.meta.url) // C:\Users\xxx\src\main.js
// => __dirname
path.dirname(fileURLToPath(import.meta.url)) // C:\Users\xxx\src

// 不推荐!
// 获取当前目录路径
fileURLToPath(new URL('./', import.meta.url)) // C:\Users\xxx\src\
// 慎用,可能会报错
path.dirname(import.meta.url) // file://Users/xxx/src

路径操作

  • path.basename(p[, ext])
    返回路径的最后一部分,即文件名。可选的 ext 参数可以从结果中去除扩展名。

    js
    const path = require('path')
    
    console.log(path.basename('/foo/bar/baz.txt')) // 'baz.txt'
    console.log(path.basename('/foo/bar/baz.txt', '.txt')) // 'baz'
  • path.dirname(p)
    返回路径的目录部分,不包括文件名。

    js
    console.log(path.dirname('/foo/bar/baz.txt')) // '/foo/bar'
  • path.extname(p)
    返回路径的扩展名,包括点号(.)。如果没有扩展名,返回空字符串。

    js
    console.log(path.extname('/foo/bar/baz.txt')) // '.txt'
    console.log(path.extname('/foo/bar/baz')) // ''
  • path.format(pathObject)
    将一个路径对象转回为路径字符串。pathObject 可以是一个包含 root, dir, base, ext, name 的对象。

    js
    const pathObj = {
      root: '/',
      dir: '/foo/bar',
      base: 'baz.txt',
      ext: '.txt',
      name: 'baz',
    }
    console.log(path.format(pathObj)) // '/foo/bar/baz.txt'
  • path.isAbsolute(p)
    判断给定的路径是否是绝对路径。如果是,返回 true,否则返回 false

    js
    console.log(path.isAbsolute('/foo/bar')) // true
    console.log(path.isAbsolute('foo/bar')) // false
  • path.join([...paths])
    将多个路径片段连接起来,并返回一个规范化的路径。会自动处理路径分隔符(如 /\\)。

    js
    console.log(path.join('/foo', 'bar', 'baz.txt')) // '/foo/bar/baz.txt'
    console.log(path.join('/foo', '/bar', 'baz.txt')) // '/bar/baz.txt'
  • path.normalize(p)
    规范化路径,解析 ...,并返回规范化后的路径。

    js
    console.log(path.normalize('/foo/bar//baz/asdf/quux/..')) // '/foo/bar/baz/asdf'
  • path.parse(p)
    解析给定的路径,返回一个对象,包含 root, dir, base, ext, name 等属性。

    js
    console.log(path.parse('/foo/bar/baz.txt'))
    // {
    //   root: '/',
    //   dir: '/foo/bar',
    //   base: 'baz.txt',
    //   ext: '.txt',
    //   name: 'baz'
    // }
  • path.relative(from, to)
    计算从 fromto 的相对路径。

    js
    console.log(path.relative('/foo/bar', '/foo/baz/quux')) // 'baz/quux'
  • path.resolve([...paths])
    通过将路径片段从右到左连接,解析并返回绝对路径。如果路径片段中包含相对路径(如 ...),则会被解析为绝对路径。

    js
    console.log(path.resolve('foo', 'bar', 'baz.txt')) // '/current/dir/foo/bar/baz.txt'
    console.log(path.resolve('/foo/bar', './baz')) // '/foo/bar/baz'
  • path.sep
    返回平台特定的路径分隔符,Linux 和 macOS 返回 '/',Windows 返回 '\\'

    js
    console.log(path.sep) // '/' 在 Linux 和 macOS,'\\' 在 Windows

常量

  • path.delimiter
    返回平台特定的路径分隔符,用于多个路径值之间的分隔。Linux 和 macOS 返回 ':',Windows 返回 ';'
    js
    console.log(path.delimiter) // ':' 在 Linux 和 macOS,';' 在 Windows

实用函数

  • path.isAbsolute(p)
    判断路径是否是绝对路径。

    js
    console.log(path.isAbsolute('/foo/bar')) // true
    console.log(path.isAbsolute('foo/bar')) // false
  • path.win32path.posix
    用于处理 Windows 和 POSIX 系统的路径方法(与上述方法相似)。通常无需显式使用,除非需要在跨平台代码中做路径处理。

    js
    console.log(path.win32.join('foo', 'bar')) // Windows 系统下使用 '\\' 分隔符
    console.log(path.posix.join('foo', 'bar')) // Linux/macOS 系统下使用 '/' 分隔符

基于 MIT 许可发布