一个非常实用的 Nodejs 库,建议收藏

402 阅读4分钟

携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第 18 天,点击查看活动详情

大家好,我是爱吃鱼的桶哥Z。自从Node.js被推出到现在,已经发展了十多年了,经过不断的升级迭代,目前在实际开发中已经被大量的运用到,并且市面上已经有了很多非常优秀的Node.js三方库,今天就给大家介绍一个在开发中频繁使用到的库fs-extra,让我们一起来了解一下吧。

文件及文件夹相关操作

Node.js的日常开发中,最常用到的模块莫过于fspath之类的了,而我们要对文件或文件夹之类的进行操作,如果只用fs模块,它本身提供的API又过于简单了一些,因此市面上就出现了一些通过fs模块封装的三方库流行起来,今天要说的fs-extra就是这么一个操作文件的三方库。

因为fs-extra本身就是基于fs模块里面的API进行开发的,因此在实际的使用中,我们只需要引入fs-extra即可,下面让我们一起来看看具体的使用吧!

复制文件

当我们需要将一个文件复制一份时,我们需要考虑两个点,首先被复制的文件是否存在,其次还需要将被复制文件读取出来,然后再写入到新的文件中,如果使用原生的Node.js提供的fs模块来操作,就需要按照前面说的这两个步骤来实现,实现这样的代码比较麻烦,好在fs-extra给我们提供了一个copy方法,只需要传入需要被复制的文件名,以及要复制后的文件名,copy方法就能帮我们完成复制的任务了,并且copy方法还有一个同步的方法copySync,下面我们一起看一下具体的用法,代码如下:

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

// 复制文件A到文件B
// 异步方法
fse.copy('book/a', 'book/b')
    .then(() => console.log('copy success'))
    .catch(err => console.error(err));
    
// 同步方法
try {
    fs.copySync('/book/a', '/book/b');
    console.log('copy success');
} catch (err) {
    console.error(err);
}

通过上述的代码我们能够看到复制文件很简单,因为fs-extra在内部已经帮我们实现了相关的操作。

检测文件夹是否为空

除了复制文件之外,fs-extra还提供了很多比较实用的方法,例如,判断一个文件夹是否为空,如果不为空,则直接删除文件夹中的内容;反之如果不存在这个文件夹,则直接创建一个新的文件夹。如果我们用fs提供的API自己来实现这个功能,就需要按照的内容进行操作。fs-extra给我们提供了一个方法emptyDir。顾名思义,这个方法就是前面例子里面说的内容,并且这个方法也提供了同步的版本emptyDirSync。基本上fs-extra提供的每个方法都是有同步和异步的,因此我们完全可以按照自己的喜欢来进行使用,下面一起来看代码。

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

// promise 异步模式
fse.emptyDir('/book/dir')
    .then(() => {
        console.log('success!')
    })
    .catch(err => {
        console.error(err)
    });
    
// 同步模式
fse.emptyDirSync('/tmp/some/dir')

同步模式相对异步模式来说使用起来会更利于理解一些,但是我们在使用的过程中一定要加上try...catch,这样才能确保当代码执行错误时能够捕获到相关的错误信息。

当然除了上述介绍的两个方法外,fs-extra还提供了很多别的文件操作方法,例如:movemkdirsremove等等,如果在实际的开发中,你也有想过的需求,可以看一下fs-extra的官方文档,具体可以点击这里

最后

当我们要实现某些功能的时候,可以先到网上去搜一下有没有想过的工具库可以直接使用,避免重复造轮子,这样不仅能够提升效率,也会让我们的开发更简单轻松,如果你也有什么好的工具库推荐,欢迎在评论区进行讨论。

最后,如果这篇文章有帮助到你,❤️关注+点赞❤️鼓励一下作者,谢谢大家

参考文档

node-fs-extra