配置 Watch


编译器支持使用环境变量配置如何监视文件和目录的变化。

使用TSC_WATCHFILE环境变量来配置文件监视

选项描述
PriorityPollingInterval使用fs.watchFile但针对源码文件,配置文件和消失的文件使用不同的轮询间隔
DynamicPriorityPolling使用动态队列,对经常被修改的文件使用较短的轮询间隔,对未修改的文件使用较长的轮询间隔
UseFsEvents使用 fs.watch,它使用文件系统事件(但在不同的系统上可能不一定准确)来查询文件的修改/创建/删除。注意少数的系统如Linux,对监视者的数量有限制,如果使用fs.watch创建监视失败那么将通过fs.watchFile来创建监视
UseFsEventsWithFallbackDynamicPolling此选项与UseFsEvents类似,只不过当使用fs.watch创建监视失败后,回退到使用动态轮询队列进行监视(如DynamicPriorityPolling介绍的那样)
UseFsEventsOnParentDirectory此选项通过fs.watch(使用系统文件事件)监视文件的父目录,因此CPU占用率低但也会降低精度
默认 (无指定值)如果环境变量TSC_NONPOLLING_WATCHER设置为true,监视文件的父目录(如同UseFsEventsOnParentDirectory)。否则,使用fs.watchFile监视文件,超时时间为250ms

使用TSC_WATCHDIRECTORY环境变量来配置目录监视

在那些Nodejs原生就不支持递归监视目录的平台上,我们会根据TSC_WATCHDIRECTORY的不同选项递归地创建对子目录的监视。 注意在那些原生就支持递归监视目录的平台上(如Windows),这个环境变量会被忽略。

选项描述
RecursiveDirectoryUsingFsWatchFile使用fs.watchFile监视目录和子目录,它是一个轮询监视(消耗CPU周期)
RecursiveDirectoryUsingDynamicPriorityPolling使用动态轮询队列来获取目录与其子目录的改变
默认 (无指定值)使用fs.watch来监视目录及其子目录

背景

在编译器中--watch的实现依赖于Nodejs提供的fs.watchfs.watchFile,两者各有优缺点。

fs.watch使用文件系统事件通知文件及目录的变化。
但是它依赖于操作系统,且事件通知并不完全可靠,在很多操作系统上的行为难以预料。
还可能会有创建监视个数的限制,如Linux系统,在包含大量文件的程序中监视器个数很快被耗尽。
但也正是因为它使用文件系统事件,不需要占用过多的CPU周期。
典型地,编译器使用fs.watch来监视目录(比如配置文件里声明的源码目录,无法进行模块解析的目录)。
这样就可以处理改动通知不准确的问题。
但递归地监视仅在Windows和OSX系统上支持。
这就意味着在其它系统上要使用替代方案。

fs.watchFile使用轮询,因此涉及到CPU周期。
但是这是最可靠的获取文件/目录状态的机制。
典型地,编译器使用fs.watchFile监视源文件,配置文件和消失的文件(失去文件引用),这意味着对CPU的使用依赖于程序里文件的数量。

Js中文网 – ts中文手册,JavaScript 教程, www.javascriptC.com,typescript 中文文档
一个帮助开发者成长的社区,你想要的,在这里都能找到

看完两件小事

如果你觉得这篇文章对你挺有启发,我想请你帮我两个小忙:

  1. 关注我们的 GitHub 博客,让我们成为长期关系
  2. 把这篇文章分享给你的朋友 / 交流群,让更多的人看到,一起进步,一起成长!
  3. 关注公众号 「IT平头哥联盟」,公众号后台回复「资源」 免费领取我精心整理的前端进阶资源教程

JS中文网是中国领先的新一代开发者社区和专业的技术媒体,一个帮助开发者成长的社区,目前已经覆盖和服务了超过 300 万开发者,你每天都可以在这里找到技术世界的头条内容。欢迎热爱技术的你一起加入交流与学习,JS中文网的使命是帮助开发者用代码改变世界