fs的替代品fs-extra浅谈


fs 的替代品 fs-extra

fs-extra是fs的一个扩展,提供了非常多的便利API,并且继承了fs所有方法和为fs方法添加了promise的支持。它应该是 fs 的替代品。

安装

npm install fs-extra -S

开源代码地址

https://github.com/jprichardson/node-fs-extra.git

用法

fs-extra代替fs使用,所有fs方法都附在fs-extra,fs如果未传递回调,则所有方法都将返回promise

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

大多数方法默认为异步,如果未传递回调,则所有异步方法将返回一个promise。


const fs = require('fs-extra')
 
// 异步方法,返回promise
fs.copy('/tmp/myfile', '/tmp/mynewfile')
  .then(() => console.log('success!'))
  .catch(err => console.error(err))
 
// 异步方法,回调函数
fs.copy('/tmp/myfile', '/tmp/mynewfile', err => {
  if (err) return console.error(err)
  console.log('success!')
})
 
// 同步方法,注意必须使用try catch包裹着才能捕获错误
try {
  fs.copySync('/tmp/myfile', '/tmp/mynewfile')
  console.log('success!')
} catch (err) {
  console.error(err)
}
 
// Async/Await:
async function copyFiles () {
  try {
    await fs.copy('/tmp/myfile', '/tmp/mynewfile')
    console.log('success!')
  } catch (err) {
    console.error(err)
  }
}
 
copyFiles()

API Methods

下面的所有方法都是fs-extra扩展方法

Async

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

Sync

  • copySync
  • emptyDirSync
  • ensureFileSync
  • ensureDirSync
  • ensureLinkSync
  • ensureSymlinkSync
  • mkdirpSync
  • mkdirsSync
  • moveSync
  • outputFileSync
  • outputJsonSync
  • pathExistsSync
  • readJsonSync
  • removeSync
  • writeJsonSync

简单介绍一些异步方法的使用和作用,详细请看官方文档

copy()

copy(src:string, dest:string, [options:object, callback:function])

注意:src 如果是目录,它将复制此目录内的所有内容,而不是整个目录本身;dest 注意的是 ,如果 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.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 文件 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 相同,除了必须保证目录存在外

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 文件,然后将其解析为对象

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')
})

文章作者: 何不去高处
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 何不去高处 !
 上一篇
node文件系统-fs模块 node文件系统-fs模块
node文件系统-fs模块。Node.js 提供一组类似 UNIX(POSIX)标准的文件操作API。
2024-01-08
下一篇 
Web页面全链路性能优化指南 Web页面全链路性能优化指南
性能优化不单指优化一个页面的打开速度,在开发环境将一个项目的启动时间缩短使开发体验更好也属于性能优化。在项目开发以及用户使用的过程中,能够让任何一个链路快一点,都可以被叫做性能优化。
2024-01-08