📜  nodemon 在 linux 中未检测到任何文件更改 (1)

📅  最后修改于: 2023-12-03 15:03:16.198000             🧑  作者: Mango

nodemon 在 linux 中未检测到任何文件更改

如果你发现在 Linux 系统中使用 nodemon 时,出现了 “未检测到任何文件更改” 的错误,那么这篇文章将会为你解决这个问题。

什么是 nodemon

nodemon 是一个 Node.js 应用程序的自动重启工具,可以监听文件变化并在变化时自动重启应用程序。

为什么会出现问题

在 Linux 系统中,nodemon 默认使用的文件监听方式是 fs.watch()。但是,fs.watch() 监听不到某些事件或者会不准确地触发事件。尤其是当你监听的文件夹中创建了新的目录时,许多 Linux 文件系统会不触发 fs.watch() 事件。

注意:这个问题只发生在 Linux 系统中。在 Windows 和 macOS 中,nodemon 使用的是另一种文件监听方式,不会出现这个问题。

如何解决问题

nodemon 提供了一个 --legacy-watch 参数,可以切换至 fs.watchFile() 监听方式。这种方式使用轮询文件状态的方式进行监听,虽然会增加 CPU 的负载,但通常可以解决 fs.watch() 监听不到的问题。

运行 nodemon 时加上 --legacy-watch 参数即可:

$ nodemon --legacy-watch app.js

或者在 nodemon.json 配置文件中添加:

{
  "legacy-watch": true
}

注意:使用 --legacy-watch 参数会降低整体的性能,如果可能的话,建议使用在 Linux 中使用 inotify-tools 工具进行文件监听。

总结

解决 nodemon 在 Linux 中未检测到任何文件更改的问题,可以使用 --legacy-watch 参数切换至 fs.watchFile() 监听方式,或者使用 inotify-tools 工具进行文件监听。