Skip to content

Node.js 的文件 I/O、路径与目录操作

文件 I/O 是 Node.js 最基础、也最常被前端工程直接用到的一组能力。

因为构建工具、脚手架、批量脚本、代码生成、资源处理,本质上都离不开:读文件、写文件、找路径、遍历目录。

1. 文件 I/O 在解决什么问题

Node.js 让 JavaScript 可以直接处理本地文件系统。

这意味着前端工程里可以很自然地做这些事:

  1. 读取配置文件
  2. 扫描项目目录
  3. 生成代码
  4. 修改静态资源
  5. 输出构建产物

2. fspath 分别做什么

2.1 fs

fs 主要负责文件系统读写和目录操作。

2.2 path

path 主要负责路径拼接、解析和规范化。

更具体一点:

  1. fs 负责“操作文件和目录”
  2. path 负责“处理路径字符串”

3. 为什么更推荐异步 I/O

Node.js 既提供同步 API,也提供异步 API。

在很多工程脚本里,同步 API 用起来会更直接;但在服务端请求处理中,异步 I/O 通常更合适,因为它不会长时间阻塞主线程继续处理其他任务。

4. 一个最基础的读写示例

js
import { readFile, writeFile } from 'node:fs/promises'

const content = await readFile('./input.txt', 'utf8')
await writeFile('./output.txt', content.toUpperCase())

这里最关键的是:

  1. 读取文件
  2. 修改内容
  3. 再写回新文件

5. 路径为什么不能随便拼字符串

很多人会直接写:

js
const filePath = dir + '/' + fileName

这在简单场景下可能能跑,但工程上更稳的做法通常是:

js
import path from 'node:path'

const filePath = path.join(dir, fileName)

因为路径分隔符、相对路径和规范化问题,不同环境下都可能带来差异。

6. 常见目录操作

前端工程脚本里还很常见:

  1. 创建目录
  2. 删除目录
  3. 递归扫描文件
  4. 判断文件是否存在

这些操作通常服务于:

  1. 脚手架初始化
  2. 构建产物输出
  3. 批量文件处理
  4. 内容生成

7. 一份检查清单

使用 Node.js 文件能力时,至少可以自查:

  1. 当前场景适合同步还是异步 I/O
  2. 路径是否使用了 path 模块处理
  3. 目录是否可能不存在
  4. 是否考虑了读写失败和权限问题

8. 小结

如果压缩成一句话,可以记住:

Node.js 的文件 I/O 和路径处理能力,是前端工程脚本、构建工具和代码生成工具最常见的底层基础。

基于 VitePress 构建的个人技术笔记。