Node.js fs-extra 库详解:异步方法与常用API使用指南

作者:星河时间:2026-10-25 17:26:55浏览:254

本文介绍 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 方法

  • copy
  • emptyDir
  • ensureFile
  • ensureDir
  • ensureLink
  • ensureSymlink
  • mkdirp
  • mkdirs
  • move
  • outputFile
  • outputJson
  • pathExists
  • readJson
  • remove
  • writeJson

本节重点介绍 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')
})

以上为个人经验总结,希望能给大家一个参考,也希望大家多多支持本站。

作者最新文章