Skip to main content
On this page

监视模式与 HMR

Deno 内置了文件监视器,因此在编辑时你不需要 nodemon 或任何其他外部工具来重新加载程序。本页将介绍会被监视的内容、如何排除路径,以及热模块替换。

监视模式 Jump to heading

你可以为 deno rundeno testdeno fmt 提供 --watch 标志,以启用内置文件监视器。该监视器会在检测到源文件发生变化时自动重新加载你的应用程序。这在开发过程中尤其有用,因为它可以让你无需手动重启应用程序,就能立即看到更改的效果。

deno run --watch main.ts
deno test --watch
deno fmt --watch

被监视的文件将取决于所使用的子命令:

  • 对于 deno rundeno test,会监视入口点以及入口点静态导入的所有本地文件。
  • 对于 deno fmt,会监视作为命令行参数指定的所有本地文件和目录(如果没有传入特定的文件/目录,则监视工作目录)。

你可以通过提供 --watch-exclude 标志来从监视中排除路径或模式。语法是 --watch-exclude=path1,path2。例如:

deno run --watch --watch-exclude=file1.ts,file2.ts main.ts

这将使 file1.ts 和 file2.ts 不被监视。

要排除某个模式,请记得将其用引号括起来,以防止你的 shell 展开 glob:

deno run --watch --watch-exclude='*.js' main.ts

热模块替换 Jump to heading

deno run 还支持 --watch-hmr 标志,它会在运行中的进程中热替换已更改的模块,而不是重启进程。这样可以在编辑过程中保留应用程序的状态。如果热替换失败,进程会回退为完整重启。

deno run --watch-hmr main.ts

带原子保存的编辑器 Jump to heading

某些编辑器使用“原子保存”(也称为安全写入),即编辑器会将你的更改写入临时文件,然后在每次保存时将其重命名覆盖原文件。在 Linux 上,这会把磁盘上的文件替换为一个新文件,这可能会在第一次更改后使 --watch-hmr 使用的文件监视器失去连接。其表现是热替换只会生效一次,然后就停止检测该模块后续的编辑。

如果你遇到这种情况,请在编辑器中禁用原子保存:

  • Helix:设置 [editor] atomic-save = false(默认启用)。
  • Neovim/Vim:设置 :set backupcopy=yes

普通的 --watch 不受影响,因为每次更改都会触发完整重启,从而重新建立监视器。

Last updated on

Did you find what you needed?

编辑此页面
Privacy policy