文章目录
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)
- 作用: 计算从
from
到to
的相对路径。 - 示例:
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 查看本文章
