fs-extra 与 fs 区别是什么?
nodejs 的 fs-extra 与 fs 区别是什么?
fs
和 fs-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
,它可以大大简化代码并提升开发效率。