我们正在Ubuntu服务器上使用带chokidar和nodejs的文件进行更改。它工作得很好,但有时我认为更改时保存文件的方式存在问题:在chokidar中,触发了“onchange”事件,但是当我们在回调中读取文件时,该文件为空或(很少)没有写完。我们不知道这是由于文本编辑器编写文件,客户端计算机上的操作系统,服务器上的OS或文件系统(ext4)引起的问题还是chokidar中的某种错误。

现在,几乎每次使用一台使用Sublime 3的计算机(Mac,最新的osx版本)对文件进行更改时,都会发生此空文件问题。在崇高的环境中,我们尝试了设置“atomic_save”(创建一个临时文件,然后覆盖原始文件),但是它没有解决我们的问题:

  • 将atomic_save设置为“false”时,在onchange事件和
  • 中文件似乎始终为空
  • 使用atomic_save为“true”时,它有时是空的,有时是部分写入的。

  • 我们在使用phpstorm之前就遇到了这个问题,但是在切换到“使用“安全写入”(首先将更改保存到临时文件)”之后-与sublime中的atomic_save设置相同,这也是为什么我们在sublime中尝试atomic_save-onchange的原因写入完成后正确触发了事件。

    因此,我们的问题是,是否有办法在完全以某种方式(在chokidar中,在OS中,在崇高的状态下)完全写入文件时触发“onchange”?还是我们必须在“onchange”事件中检查文件大小,直到一段时间没有变化(不太好)?还是我们的问题可能是由于其他原因而发生的?

    我们将不胜感激!提前致谢!

    最佳答案

    仔细阅读chokidar自述文件的performance部分,我发现了以下内容:



    假设两次保存之间的时间间隔超过了几秒钟,这看起来可以解决您的问题。

    09-10 17:13