本文分享一个 JavaScript 的现代文件系统操作库 humanfs
。
在一定程度上,可以作为流行的文件、目录操作库 fx-extra
的替代。。
总体目标是创建一个令人愉快、灵活、可观察的文件系统操作库,该库更符合现代 API 设计而非 Linux 实用程序设计。
介绍
humanfs 提供了 4 种不同环境下的包:
@humanfs/node
,在 Node.jsfs/promises
模块上运行的 humanfs 实现。@humanfs/deno
,在 Deno 全局运行的 humanfs 实现。@humanfs/web
,humanfs 实现在浏览器中的 Origin 私有文件系统上运行。@humanfs/memory
,humanfs 实现在内存中运行,适用于任何 JavaScript 运行时。
接下来以 node 环境为例,演示一下它的用法。
导入
import { hfs } from '@humanfs/node';
示例
// 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
判断文件:
const text = await hfs.text('/path/to/file.txt');
if (!text) {
// 在这里写文件不存在时的逻辑
}
使用 ??
空值合并运算符赋初始值:
// 读取普通文件
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 年时间没出过门。
身体是革命的本钱,希望各位读者朋友们,也要多多关注身体健康,不要一直超出自身负荷做事情,有些东西,也要适当放弃。