fs-extra 与 fs 区别是什么?

nodejs 的 fs-extra 与 fs 区别是什么?

fsfs-extra 都是 Node.js 中用于操作文件系统的模块,但它们在功能和使用场景上有明显区别。下面是它们的主要区别:


📌 1. fs(File System 标准模块)

  • 内置模块fs 是 Node.js 官方提供的内置模块,无需额外安装。
  • 基础功能:提供基本的文件操作方法,如读写文件、创建目录、删除文件等。
  • 同步和异步 API:提供同步(如 readFileSync)和异步(如 readFile)两种方式。
  • 功能有限:不提供高级操作(如复制目录、递归删除等),需要自己组合多个方法实现。

示例:

const fs = require('fs');

// 异步读取文件
fs.readFile('test.txt', 'utf8', (err, data) => {
  if (err) throw err;
  console.log(data);
});

📌 2. fs-extra

  • 第三方模块:基于 fs 的封装,提供了更多实用功能,需要额外安装。
  • 兼容 fs 模块fs-extra 完全兼容 Node.js 的 fs 模块,你可以用 fs-extra 替代 fs
  • 提供更多高级功能
    • 复制目录(copy)
    • 移动文件/目录(move)
    • 删除目录(包括非空目录)(remove)
    • 确保目录存在(ensureDir)
    • 读写 JSON 文件(readJson, writeJson)
  • 更友好的 API:很多操作是递归、幂等的,避免写大量样板代码。

安装:

npm install fs-extra

示例:

const fs = require('fs-extra');

// 复制整个目录
await fs.copy('/src/dir', '/dest/dir');

// 删除非空目录
await fs.remove('/path/to/dir');

// 确保目录存在(递归创建)
await fs.ensureDir('/path/to/new/dir');

✅ 总结对比表

| 功能/特性 | fs (内置) | fs-extra (第三方) |
|------------------|-------------|----------------------|
| 是否内置 | ✅ 是 | ❌ 否 |
| 文件读写 | ✅ 支持 | ✅ 支持 |
| 目录操作 | ❌ 有限 | ✅ 高级支持(递归等) |
| 复制目录 | ❌ 无 | ✅ 支持 |
| 删除非空目录 | ❌ 无 | ✅ 支持 |
| 确保路径存在 | ❌ 无 | ✅ 支持 |
| JSON 文件操作 | ❌ 无 | ✅ 支持 |
| 是否兼容 fs | - | ✅ 完全兼容 |


🧩 何时使用?

  • ✅ 使用 fs:如果你只需要基本的文件读写操作,不需要复杂的目录处理。
  • ✅ 使用 fs-extra:如果你需要复制目录、删除非空目录、确保路径存在等高级功能。

🔗 参考文档


如果你在开发一个需要频繁操作文件结构的项目(如构建工具、脚手架、部署工具等),推荐使用 fs-extra,它可以大大简化代码并提升开发效率。