Appearance
fs-extra
简介
fs-extra 是 Node.js 内置 fs 模块的增强版,提供了更多的功能,如复制文件和目录、确保目录存在、删除目录等,并且所有方法都支持 Promise。
安装
bash
npm install fs-extra基本使用
1. 导入模块
javascript
// 使用 Promise
const fs = require('fs-extra')
// 或者使用回调
const fs = require('fs-extra').callback2. 基本操作
javascript
// 复制文件
await fs.copy('/tmp/myfile', '/tmp/mynewfile')
// 确保目录存在
await fs.ensureDir('/tmp/some/long/path')
// 删除目录
await fs.remove('/tmp/mydir')
// 读取 JSON 文件
const data = await fs.readJson('./package.json')高级特性
1. 复制目录
javascript
// 复制目录及其内容
await fs.copy('/tmp/mydir', '/tmp/mynewdir', {
overwrite: true,
errorOnExist: false,
dereference: true,
preserveTimestamps: true,
})2. 文件操作
javascript
// 确保文件存在
await fs.ensureFile('file.txt')
// 移动文件
await fs.move('/tmp/file', '/tmp/newfile')
// 写入 JSON
await fs.writeJson(
'./config.json',
{
name: 'fs-extra',
version: '1.0.0',
},
{
spaces: 2,
},
)3. 目录操作
javascript
// 清空目录
await fs.emptyDir('/tmp/some/dir')
// 确保符号链接
await fs.ensureSymlink('/tmp/file', '/tmp/link')
// 获取目录大小
const size = await fs.pathExists('/tmp/some/file')最佳实践
错误处理
javascriptasync function copyFiles() { try { await fs.copy('./src', './dest') console.log('复制成功') } catch (err) { console.error('复制失败:', err) } }递归操作
javascriptasync function processDir(dir) { try { await fs.ensureDir(dir) const files = await fs.readdir(dir) for (const file of files) { const filePath = path.join(dir, file) const stats = await fs.stat(filePath) if (stats.isDirectory()) { await processDir(filePath) } } } catch (err) { console.error('处理目录失败:', err) } }原子操作
javascriptasync function safeWrite(file, data) { const tempFile = `${file}.tmp` try { await fs.writeFile(tempFile, data) await fs.move(tempFile, file, { overwrite: true }) } catch (err) { await fs.remove(tempFile) throw err } }
注意事项
- 所有操作都是异步的,记得使用 async/await 或 Promise
- 复制大文件时注意内存使用
- 递归操作时要注意文件系统限制
- 在生产环境中要小心使用删除操作
- 注意文件权限问题