Node.js 同时读写流到同一个文件

Node.js read and write stream to the same file at the same time

TL;DR

我正在浏览 npmgithub 上的一些解决方案,寻找可以让我 readwrite 到同一个文件的东西同时在两个不同的地方。到目前为止,我很难找到这样的东西。是否有某种模块允许这样做?

背景

本质上,我的要求是在一个大文件中,我需要按以下顺序:

理想情况下,用法类似于:

const fd = fs.open(file, "r+");
const read = createReadStreamSomehowFrom(fd);
const write = createWriteStreamSomehowFrom(fd);

read
   .pipe(new Transform(transform() {...}))
   .pipe(write);

我可以用标准 fs.create[Read/Write]Stream 做到这一点,但是没有办法控制两个流的流动,如果我的写入位置超出读取位置,那么我正在阅读我刚写的东西...

用例与perl -p -i -e相同,异步读写同一个文件(意思是同一个inode)并替换内容而不将所有内容加载到内存中。

我希望这是一个真实世界的用例,但我发现的所有实现实际上都是将整个文件加载到内存中,然后保存它。我是不是遗漏了一个已知的模块,还是真的需要写这样的东西?

嗯...看起来很难。 :)

所以这里是记录 - 我没有找到这样的模块,实际上与一些负责文件内替换模块的人讨论过这个问题。看到没有办法解决这个问题,我决定从头开始写,这里是:

该模块的工作原理很简单,即在可读流中使用之前不能写入任何字节,并且它的底层相当简单(耦合 fs.read/write 操作,同时关注读写点).

如果您觉得这有用,我很高兴。 :)