humanfs,人性化的文件目录操作库

大家好,我是农村程序员,独立开发者,前端之虎陈随易。

这是我的个人网站:chensuiyi.me

我的所以文章都可以在我的个人网站找到,欢迎访问,也欢迎与我交朋友。


本文分享一个 JavaScript 的现代文件系统操作库 humanfs

在一定程度上,可以作为流行的文件、目录操作库 fx-extra 的替代。。

总体目标是创建一个令人愉快、灵活、可观察的文件系统操作库,该库更符合现代 API 设计而非 Linux 实用程序设计。

介绍

humanfs 提供了 4 种不同环境下的包:

  • @humanfs/node,在 Node.js fs/promises 模块上运行的 humanfs 实现。
  • @humanfs/deno,在 Deno 全局运行的 humanfs 实现。
  • @humanfs/web,humanfs 实现在浏览器中的 Origin 私有文件系统上运行。
  • @humanfs/memory,humanfs 实现在内存中运行,适用于任何 JavaScript 运行时。

接下来以 node 环境为例,演示一下它的用法。

导入

js 复制代码
import { hfs } from '@humanfs/node';

示例

js 复制代码
// 1. 文件操作

// 读取普通文件
const text = await hfs.text('file.txt');

// 读取 json 文件
const json = await hfs.json('file.json');

// 从文本文件读取原始字节
const arrayBuffer = await hfs.arrayBuffer('file.txt');

// 将文本写入文件
await hfs.write('file.txt', 'Hello world!');

// 将字节写入文件
await hfs.write('file.txt', new TextEncoder().encode('Hello world!'));

// 将文本追加到文件
await hfs.append('file.txt', 'Hello world!');

// 将字节追加到文件
await hfs.append('file.txt', new TextEncoder().encode('Hello world!'));

// 判断文件是否存在
const found = await hfs.isFile('file.txt');

// 查询文件大小
const size = await hfs.size('file.txt');

// 查询文件修改时间
const mtime = await hfs.lastModified('file.txt');

// 复制文件
await hfs.copy('file.txt', 'file-copy.txt');

// 移动文件
await hfs.move('file.txt', 'renamed.txt');

// 删除文件
await hfs.delete('file.txt');

// 2. 目录操作

// 创建一个目录
await hfs.createDirectory('dir');

// 递归创建目录
await hfs.createDirectory('dir/subdir');

// 判断目录是否存在
const dirFound = await hfs.isDirectory('dir');

// 复制整个目录
hfs.copyAll('from-dir', 'to-dir');

// 移动整个目录
hfs.moveAll('from-dir', 'to-dir');

// 删除目录
await hfs.delete('dir');

// 删除非空目录
await hfs.deleteAll('dir');

使用 if 判断文件:

js 复制代码
const text = await hfs.text('/path/to/file.txt');

if (!text) {
    // 在这里写文件不存在时的逻辑
}

使用 ?? 空值合并运算符赋初始值:

js 复制代码
// 读取普通文件
const text = (await hfs.text('/path/to/file.txt')) ?? 'default value';

// 读取JSON
const json = (await hfs.json('/path/to/file.json')) ?? {};

// 读取字节
const bytes = (await hfs.bytes('/path/to/file.png')) ?? new Uint8Array();

可以看到,操作非常地简单方便,不过呢,也有个问题,humanfs 能做的,fs-extra 都能做。

对比

那么我们来对比一下两者的优势和劣势:

发版时间

humanfs (2024年10月28日),fs-extra (2023年11月28日)。

humanfs 正在积极更新,fs-extra 已经1年没发版了。

发布提交

名称 humanfs fs-extra
发布时间 2023年12月13日(1年) 2011年11月17日(13年)
提交次数 185次 1115次
发版数量 17 96
贡献者数量 8 92

由于发布时间问题,humanfs 此类数据均低于 fs-extra。

开源协议

humanfs (Apache-2.0),fs-extra (MIT)。

fs-extra 的开源协议更为宽松,不过 Apache-2.0 也是直接可以商用的。

项目体积

humanfs (44.1kB),fs-extra (54.9kB)。

这里用的是 humanfs 的 node 包,两者体积相差无几。

周下载量

humanfs (3,000,000+),fs-extra (90,000,000)。

fs-extra 的周下载量是 humanfs 的 3 倍,毕竟是比较早期的库,fs-extra 已被无数的项目所依赖和使用。

结论

那么综上通过上面的数据,可以看到,稳定派 更适合 fs-extra激进派 试试 humanfs 又何妨。

笔者呢,是 激进派

番外

接下来,是我们有趣的番外时间~。

这是作者的主页,可以看到是一个小绿点超多的大佬。

更为震惊的是,鼎鼎大名的 ESlint 居然也是他的作品。

同时呢,他也是独立软件开发人员、顾问、教练和作家,曾在雅虎和 Box 等公司担任软件架构师,目前生活在加利福尼亚州山景城。

Nicholas C. Zakas 2005年出版了第一本书,从此一发不可收拾,又出版了多本 JavaScript 相关的书籍。

同时也创作了 3 本电子书,妥妥的编程大佬。

不过大佬的身体状况有些问题,曾经患有莱姆病,有 5 年时间没出过门。

身体是革命的本钱,希望各位读者朋友们,也要多多关注身体健康,不要一直超出自身负荷做事情,有些东西,也要适当放弃。

相关推荐
lbh6 小时前
当我开始像写代码一样和AI对话,一切都变了
前端·openai·ai编程
短剑重铸之日7 小时前
《ShardingSphere解读》07 读写分离:如何集成分库分表+数据库主从架构?
java·数据库·后端·架构·shardingsphere·分库分表
We་ct7 小时前
LeetCode 918. 环形子数组的最大和:两种解法详解
前端·数据结构·算法·leetcode·typescript·动态规划·取反
wefly20178 小时前
m3u8live.cn 在线M3U8播放器,免安装高效验流排错
前端·后端·python·音视频·前端开发工具
C澒8 小时前
微前端容器标准化 —— 公共能力篇:通用打印
前端·架构
德育处主任Pro8 小时前
前端元素转图片,dom-to-image-more入门教程
前端·javascript·vue.js
木斯佳8 小时前
前端八股文面经大全:小红书前端一二面OC(下)·(2026-03-17)·面经深度解析
前端·vue3·proxy·八股·响应式
zhanggongzichu9 小时前
小白怎么理解后端分层概念
后端·全栈
陈天伟教授9 小时前
人工智能应用- 预测新冠病毒传染性:04. 中国:强力措施遏制疫情
前端·人工智能·安全·xss·csrf
zayzy9 小时前
前端八股总结
开发语言·前端·javascript