Ryo*_*Ryo 4 file onchange node.js is-empty sublimetext3
我们正在 Ubuntu 服务器上使用带有 nodejs 的 chokidar 监视文件更改。它工作得很好,但有时我认为我们在更改时保存文件的方式有问题:在 chokidar 中触发了“onchange”事件,但是当我们在回调中读取文件时,它是空的或(很少)没有写完全。我们不知道这是由写入文件的文本编辑器、客户端计算机上的操作系统、服务器上的操作系统或文件系统 (ext4) 引起的问题,还是 chokidar 中的某种错误。
这个空文件问题现在几乎每次都会发生,因为在使用 sublime 3 的一台计算机(mac,最新的 osx 版本)上进行了文件更改。在 sublime 中,我们尝试了设置“atomic_save”(创建一个临时文件然后覆盖原始文件),但它没有解决我们的问题:
我们之前在使用 phpstorm 时遇到过这个问题,但是在切换到 “使用“安全写入”(首先将更改保存到临时文件)”之后——所以与 sublime 中的 atomic_save 设置相同,这也是我们在 sublime 中尝试 atomic_save 的原因——onchange完成写入后事件被正确触发。
所以我们的问题是,有没有办法在文件以某种方式完全写入时触发“onchange”(在 chokidar、OS、sublime 中)?或者我们是否必须在“onchange”事件中检查文件大小直到一段时间没有改变(不太好)?或者我们的问题可能是由于其他原因造成的?
我们将不胜感激任何提示!提前致谢!
查看自述文件的性能部分chokidar,我发现了以下内容:
awaitWriteFinish(默认:)false。默认情况下,当文件首次出现在磁盘上时,在写入整个文件之前,将触发 add 事件。此外,在某些情况下,在change写入文件时会发出一些事件。在某些情况下,尤其是在观察大文件时,需要等待写入操作完成,然后才能响应文件创建或修改。设置awaitWriteFinish为true(或一个真值)将轮询文件大小,保持其add和change事件,直到大小在可配置的时间内没有改变。适当的持续时间设置在很大程度上取决于操作系统和硬件。为了准确检测,此参数应该相对较高,从而使文件查看响应性降低。谨慎使用。
options.awaitWriteFinish可以设置为一个对象以调整时间参数:
awaitWriteFinish.stabilityThreshold(默认:)2000。文件大小在发出事件之前保持不变的时间(以毫秒为单位)。awaitWriteFinish.pollInterval(默认:)100。文件大小轮询间隔。
假设文件保存之间的时间超过几秒钟,这看起来可以解决您的问题。
| 归档时间: |
|
| 查看次数: |
2117 次 |
| 最近记录: |