Node.js fs-extra 库详解:异步方法与常用API使用指南
本文介绍 Node.js 中 fs-extra 库的安装与核心功能。作为原生 fs 模块的扩展,fs-extra 提供了 Promise 和 async/await 支持,并包含 copy、emptyDir、ensureFile、move 等常用方法。文章详细解析了各方法的参数、注意事项及代码示例,帮助开发者更高效地进行文件与目录操作。
fs-extra
fs-extra 是对 Node.js 原生 fs 模块的增强扩展,它不仅完整保留了 fs 的所有原有方法,还额外为这些方法添加了 Promise 语法支持,使得异步文件操作更加简洁。
安装
npm i fs-extra使用
const fse = require('fs-extra')Async 方法
copyemptyDirensureFileensureDirensureLinkensureSymlinkmkdirpmkdirsmoveoutputFileoutputJsonpathExistsreadJsonremovewriteJson
本节重点介绍 fs-extra 中涉及的各类异步操作方法,这些方法旨在简化文件系统的复杂操作。
方法
关于各个方法的具体用法和详细参数,建议参考官方文档获取完整说明。此处仅对这些核心方法的功能和使用场景进行简要概述。
copy()
copy(src:string, dest:string, [options:object, callback:function])需要注意:当源路径 src 指向目录时,该方法会复制目录内的所有文件及子目录,而非仅复制目录句柄本身;若源路径 src 为文件,则目标路径 dest 必须指定为具体的文件路径,不能是目录。
此方法用于复制文件或整个目录。若源为目录,目标目录将包含源目录下的所有内容。
// 复制文件
fse.copy('old.txt', 'new.txt', err => {
if (err) throw err
console.log('success')
})
// 复制目录,目录可以包含内容
fse.copy('utils', 'newutils', err => {
if (err) throw err
console.log('success')
})
// promise
fse.copy('utils', 'newutils')
.then(() => {
console.log('success')
})
.catch(err => {
console.log(err)
})
// async/await
async function test () {
try {
await fse.copy('utils', 'newutils')
console.log('success')
} catch (err) {
console.log(err)
}
}
test()emptyDir()
emptyDir(dir:string, [callback:function])确保指定目录为空。如果目标目录已存在且包含内容,则先清空其内部所有文件;如果目标目录不存在,则自动创建该空目录。此操作不会删除目录本身。
实例
fse.emptyDir('newutils', err => {
if (err) throw err
console.log('success')
})ensureFile()
ensureFile(file:string, [callback:func])确保指定文件存在。如果文件所在的父级目录不存在,该方法会自动创建所需的目录结构;若文件已存在,则不做任何修改。
实例
fse.ensureFile('newutils/seq.js', err => {
if (err) throw err
console.log('success')
})ensureDir()
ensureDir(dir:string, [callback:func])若指定的目录结构尚不存在,则创建该目录;若目录已存在,则跳过创建步骤。
此方法在功能上等同于 mkdirs() 或 mkdirp()。
实例
fse.ensureDir('newutil', err => {
if (err) throw err
console.log('success')
})move()
move(src:string, dest:string, [options:object, callback:func])用于移动文件或目录到指定位置。
实例
fse.move('newutils/seq.js', 'newutil/seq.js', err => {
if (err) throw err
console.log('success')
})outputFile()
outputFile(file:string, data:string|Buffer|Uint8Array, [options:String|object, callback:func])向文件写入数据。如果文件所在的父级目录不存在,会自动创建该目录。注意:file 参数必须是文件路径字符串,不支持直接传入缓冲区或文件描述符。
实例
fse.outputFile('newutil/seq.js', 'hello, Node.js', err => {
if (err) throw err
console.log('success')
})outputJson()
outputJson(file:string, object:object, [options:object, callback:func])将 JSON 数据写入文件,默认采用写模式(w),这会覆盖文件原有内容。如果文件所在的目录不存在,会自动创建该目录。
实例
fse.outputJson('newutil/seq.json', { name: 'duli' }, err => {
if (err) throw err
console.log('success')
})writeJson()
writeJson(file, object, [options, callback])将对象写入 JSON 文件。其功能与 outputJson 几乎相同,主要区别在于:使用 writeJson 时,必须确保目标目录已经存在,它不会自动创建缺失的目录。
实例
fse.writeJSON('newutil/seq.json', { name: 'cc' }, err => {
if (err) throw err
console.log('success')
})pathExists()
pathExists(file:string, [, callback:func])检查文件系统中给定路径是否存在。
实例
fse.pathExists('newutil/seq.js', (err, exists) => {
if (err) throw err
console.log(exists)
})readJson()
readJson(file:string, [options:object, callback:func])读取 JSON 文件内容,并将其解析为 JavaScript 对象返回。
实例
fse.readJson('newutil/seq.json', (err, obj) => {
if (err) throw err
console.log(obj)
console.log(typeof obj)
})remove()
remove(path:String, [callback:func])删除文件或目录。即使目录中包含内容,该方法也能将其彻底删除。
实例
fse.remove('new.txt', err => {
if (err) throw err
console.log('success')
})以上为个人经验总结,希望能给大家一个参考,也希望大家多多支持本站。
Node.js 安装配置与第一个 HTTP 服务器编写
2026-11-05 11:41:40
怎么使用 nvm 管理并平滑升级 Node.js 版本
2026-11-04 23:15:07
Node.js 怎么使用 zlib 模块解压 gzip 和 deflate
2026-11-03 23:40:50
直接覆盖安装还是用版本管理器?Node.js 升级方式对比
2026-11-03 22:59:07
Express.js 是什么:Node.js Web 框架核心概念与适用场景
2026-11-03 20:00:12
