>这篇文章是 [Working with file system paths on Node.js](https://2ality.com/2022/07/nodejs-path.html) 学习过程中的个人总结和笔记,大部分内容实际来自于原文章,如果你对 Nodejs 中的文件系统 (path) 感兴趣,我更建议你直接去看原文章。 >在下文中 path 会被翻译成 路径 ## Nodejs 中路径相关(Path-related)的功能 - 大多数路径相关的功能都在模块 `node:path` 中 - 全局变量 `process` 拥有一些方法可以改变当前工作目录(current working directory) - `node:os` 模块拥有一些函数可以返回重要的目录路径 关于 `path` 的使用有三种方法,它们分辨是 - 直接使用 `path` - 使用平台特定版本(platform-specific versions)相关的 `path`: - `path.posix` 对应 Unix 系系统,包括 MacOS - `path.win32` 对应 Windows 系统 而直接使用 `path` 本身,它本身始终支持当前平台,内部似乎做了一些判断,可以从下面 Nodejs REPL 的例子中看出来: ```javascript 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()`](https://nodejs.org/api/process.html#processcwd) 会返回当前 CWD - [`process.chdir(dirPath)`](https://nodejs.org/api/process.html#processchdirdirectory) 改变当前 CWD 至 `dirPath` - 在 `dirPath` 必须有一个路径 - 改变并不会影响 shell,只影响当前运行的 Nodejs 进程 当路径不完整(isn’t fully qualified)的时候,Nodejs 会使用 CWD 来填补缺失的部分 ### 在 Windows 中的当前工作目录(CWD) 在 Windows 系统中,CWD 的工作会有些许不同: - 每个驱动器都有一个 CWD - 有一个当前驱动器(current drive)存在 我们可以使用 `path.chdir()` 同时修改两者: ```javascript process.chdir('C:\\Windows'); process.chdir('Z:\\tmp'); ``` 但是当我们重新访问一个驱动器的时候,Nodejs 会记住当前驱动器的前一个当前目录: ```javascript process.cwd() // 'Z:\\tmp' process.chdir('C:'); process.cwd() // 'C:\\Windows' ``` ### 在 Unix 上的当前工作目录