You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
4.2 KiB
4.2 KiB
这篇文章是 Working with file system paths on Node.js 学习过程中的个人总结和笔记,大部分内容实际来自于原文章,如果你对 Nodejs 中的文件系统 (path) 感兴趣,我更建议你直接去看原文章。
在下文中 path 会被翻译成 路径
Nodejs 中路径相关(Path-related)的功能
- 大多数路径相关的功能都在模块
node:path
中 - 全局变量
process
拥有一些方法可以改变当前工作目录(current working directory) node:os
模块拥有一些函数可以返回重要的目录路径
关于 path
的使用有三种方法,它们分辨是
- 直接使用
path
- 使用平台特定版本(platform-specific versions)相关的
path
:path.posix
对应 Unix 系系统,包括 MacOSpath.win32
对应 Windows 系统
而直接使用 path
本身,它本身始终支持当前平台,内部似乎做了一些判断,可以从下面 Nodejs REPL 的例子中看出来:
path.parse === path.posix.parse // true
不同的 path
特定版本的处理逻辑也会有不同,如果没有使用正确的版本,可能会出现预期之外的结果
基本路径概念及其API支持
当前工作目录 current working directory(CWD)
- 如果我们使用一个包含相对路径的命令(command),该路径将针对 CWD 进行解析
- 如果我们在省略了一个路径的期望路径(就是不传),那么这时候会使用 CWD
- 在 UNIX 和 Windows 中切换 CWD 的命令都是
cd
process
是 Nodejs 提供的全局变量,它为我们提供了一些用于获取(getting)或设置(setting)CWD 的方法:
process.cwd()
会返回当前 CWDprocess.chdir(dirPath)
改变当前 CWD 至dirPath
- 在
dirPath
必须有一个路径 - 改变并不会影响 shell,只影响当前运行的 Nodejs 进程
- 在
当路径不完整(isn’t fully qualified)的时候,Nodejs 会使用 CWD 来填补缺失的部分
在 Windows 中的当前工作目录(CWD)
在 Windows 系统中,CWD 的工作会有些许不同:
- 每个驱动器都有一个 CWD
- 有一个当前驱动器(current drive)存在
我们可以使用 path.chdir()
同时修改两者:
process.chdir('C:\\Windows');
process.chdir('Z:\\tmp');
但是当我们重新访问一个驱动器的时候,Nodejs 会记住当前驱动器的前一个当前目录:
process.cwd() // 'Z:\\tmp'
process.chdir('C:');
process.cwd() // 'C:\\Windows'
完整路径和不完整路径以及路径解析
- 一个完整路径(fully qualified path)不依赖于任何信息,可以原样使用
- 一个不完整的路径(partially qualified path)是缺少信息的,在使用之前我们需要将其解变成一个完整路径
Unix
Unix 只知道两种路径:
- 绝对路径(Absolute paths):是一个完整路径,总是以斜杠开头:
/home/user/video
- 相对路径(Relative paths):是一个不完整的路径,会以文件名或是点(dot)开头:
dir
../dir
使用 path.resolve()
在 Unix 中解析路径非常的简单,其返回会是一个绝对路径
Windows
在 Windows 中有四种路径:
- 绝对路径和相对路径
- 以上两种路径都可以带卷标和不带卷标
带卷标(drive letter)的绝对路径才是一个完整路径,而其他都是不完整路径,在 Windows 中使用 path.resolve
解析路径,规则会比较复杂,详情可以看原文章,这里就不贴出来了
通过 node:os
模块获取重要目录的路径
模块 "node:os "为我们提供了两个重要目录的路径
os.homedir()
返回当前用户的主目录路径os.tmpdir()
返回当前操作系统的临时文件目录路径
路径拼接(concatenating paths)
有两个方法用于路径拼接:
-
path.resolve()
总是返回一个w