nodejs中的path模块

Node.js 的 path 模块是处理文件路径的核心工具,它提供了一系列方法用于操作和解析文件路径,同时兼容不同操作系统(Windows 和 POSIX)的路径格式。

一、引入模块

const path = require('path')

二、常用方法

1. path.join([…paths])

  • 作用: 拼接路径片段,自动处理分隔符和相对路径符号(...)。

  • 示例:

path.join('/foo', 'bar', 'baz/qux')

// 返回: '/foo/bar/baz/qux'

path.join('foo', 'bar', '../', './', 'aaaa')

// 返回: 'foo/aaaa'
  • 注意: 不会生成绝对路径,仅仅是拼接路径片段。

2. path.resolve([…paths])

  • 作用: 从右向左解析路径为绝对路径,基于当前工作目录。

  • 示例:

// 当前工作目录为 /home/user
path.resolve('a', 'b', 'c')

// 返回: '/home/user/a/b/c'

path.resolve('/foo', 'bar')
// 返回:'/foo/bar' (左侧绝对路径会覆盖)

path.resolve()

// 返回:当前工作目录

3. path.basename(path[, ext])

  • 作用: 获取文件名(包含扩展名)。
  • 示例:
path.basename('/foo/bar/file.txt')
// 返回: 'file.txt'

path.basename('/foo/bar/file.txt', '.txt')
// 返回: 'file'

4. path.dirname(path)

  • 作用: 获取文件所在目录的路径。
  • 示例:
path.dirname('/foo/bar/file.txt')
// 返回: '/foo/bar'

5. path.extname(path)

  • 作用: 获取文件扩展名(包含 .)。
  • 示例:
path.extname('/foo/bar/file.txt')
// 返回: '.txt'
path.extname('file.coffee.md')
// 返回: '.md'

6. path.parse(path)

  • 作用: 将路径解析为对象。
  • 示例:
path.parse('/foo/bar/file.txt')

/**
 * 返回:
 * {
 *   root: '/',
 *   dir: '/foo/bar',
 *   base: 'file.txt',
 *   ext: '.txt',
 *   name: 'file'
 * }
 */

7. path.format(pathObject)

  • 作用: 将对象格式化为路径字符串。
  • 示例:
path.format({
    
    
  dir: '/foo/bar',
  base: 'file.txt'
})

// 返回: '/foo/bar/file.txt'

8. path.normalize(path)

  • 作用: 规范化路径,将多个连续的分隔符替换为单个分隔符,并将 ... 符号处理为当前目录和父目录。
  • 示例:
path.normalize('/foo/bar//baz/asdf/../quux') // POSIX: '/foo/bar/baz/quux'
path.normalize('C:\\temp\\\\foo\\bar\\..\\') // Windows: 'C:\\temp\\foo\\'

9. path.relative(from, to)

  • 作用: 计算从 fromto 的相对路径。
  • 示例:
path.relative('/foo/bar', '/foo/baz')
// 返回: '../baz'

path.relative('C:\\orandea\\test\\aaa', 'C:\\orandea\\impl\\bbb')
// 返回: '..\\..\\impl\\bbb'

10. path.isAbsolute(path)

  • 作用: 判断路径是否为绝对路径。
  • 示例:
path.isAbsolute('/foo/bar') // POSIX: true
path.isAbsolute('C:\\foo') // Windows: true
path.isAbsolute('file.txt') // false

三、跨平台处理

Node.js 的 path 模块提供了跨平台处理路径的能力,例如,在 Windows 系统上,路径分隔符为 \,而在 POSIX 系统上,路径分隔符为 /

  • 路径分隔符:

    • path.sep: 当前系统的路径分隔符(POSIX: /,Windows: \)
    • path.delimiter: 环境变量分隔符(POSIX: :,Windows: ;)。
  • 强制指定路径风格:

    • path.win32: 强制使用 Windows 路径风格
    • path.posix: 强制使用 POSIX 路径风格
path.win32.join('c:', 'temp', 'file.txt') // 返回 'c:\\temp\\file.txt'
path.posix.join('foo', 'bar') // 返回 'foo/bar'

四、注意事项

  • ​ 绝对路径的生成 :path.resolve() 依赖当前工作目录,而 path.join() 只是拼接。
  • ​ 路径分隔符 :避免手动拼接 / 或 \,使用 path.join() 代替。
  • ​ 相对路径陷阱 :path.resolve(‘a’) 可能生成 /current/working/dir/a,而非简单的 a。

掌握 path 模块可以有效避免路径拼接错误,并确保代码在不同操作系统下正常运行。建议在实际开发中优先使用这些方法,而非手动处理字符串。

扫描二维码关注公众号,回复: 17616794 查看本文章