摘要:本文主要学习了如何在编写代码时规范使用路径。
环境
Windows 10 企业版 LTSC 21H2
Node 18.14.0
NVM 1.1.12
1 概念
在处理路径时,涉及到两个概念:
- 相对路径:以当前工作目录为起点的路径,表示从当前目录到目标文件或目录的相对位置。示例:
- 使用
./file.txt
表示当前目录下的file.txt
文件,也可以使用file.txt
表示,可以省略前面的./
符号。 - 使用
../file.txt
表示当前目录的上级目录下的file.txt
文件,不能省略前面的../
符号。
- 绝对路径:从根目录开始的完整路径,表示从根目录到目标文件或目录的确切位置。示例:
- 在Windows系统中,使用
D:\file.txt
表示D盘根目录下的file.txt
文件。 - 在Linux系统中,使用
/file.txt
表示根目录下的file.txt
文件。
不同操作系统在管理路径存在差异:
- 在Linux系统中,使用
/
表示根目录,将/
作为目录的间隔符号。 - 在Windows系统中,使用
D:\
表示D盘根目录,将\
作为目录的间隔符号。但是在一些编程语言里兼容了Linux系统的规则,支持使用/
表示当前盘的根目录,支持将/
作为目录的间隔符号。
2 问题
在涉及路径的开发过程中,如果使用相对路径,会导致相同的代码在不同路径执行得到结果不一致。
创建file
目录作为当前目录,在当前目录创建file.js
文件和file.txt
文件,在file.js
文件编写代码:
1 | const fs = require('fs'); |
在当前目录执行命令node file.js
成功,因为当前目录存在file.txt
文件,在上级目录执行node file/file.js
失败,因为上级目录没有file.txt
文件。
为了解决这个问题,建议使用绝对路径,保证代码执行的结果和预期一致:
- 使用
__filename
变量可以获得代码文件绝对路径。 - 使用
__dirname
变量可以获得代码文件所在目录的绝对路径。
修改当前目录的file.js
文件,使用__dirname
变量拼接file.txt
文件的绝对路径:
1 | const fs = require('fs'); |
无论是在当前目录还是在上级目录执行,都会在file.js
文件所在的目录查找file.txt
文件。
在拼接时建议使用/
作为分隔符,不能使用\
作为分隔符,因为\
单独使用表示转义字符,需要使用转义后的\\
表示\
作为分隔符:
1 | const fs = require('fs'); |
3 使用
Node中内置的path
模块简化了对路径的操作。
3.1 拼接路径
语法:
1 | path.resolve([...paths]) |
返回:
- String对象。
参数:
- paths:文件路径,支持多个拼接。如果参数是绝对路径,则清空前面的参数,拼接后面的参数。
示例:
1 | const path = require('path'); |
3.2 获取分隔符
语法:
1 | path.sep |
返回:
- String对象。
示例:
1 | const path = require('path'); |
3.3 解析路径
语法:
1 | path.basename(path[, suffix])// 获取路径基础名称 |
返回:
- String对象。
参数:
- path:文件路径。
- suffix:要删除的可选后缀。
示例:
1 | const path = require('path'); |
3.4 解析路径返回对象
语法:
1 | path.parse(path) |
返回:
- Object对象,封装了对象信息。
参数:
- path:文件路径。
示例:
1 | const path = require('path'); |
3.5 解析对象返回路径
语法:
1 | path.format(pathObject) |
返回:
- String对象。
参数:
- pathObject:文件对象。
示例:
1 | const path = require('path'); |
条