配置监视

编译器支持配置如何使用 TypeScript 3.8+ 中的编译器标志以及之前的环境变量来监视文件和目录。

背景

编译器的 --watch 实现依赖于使用 node 提供的 fs.watchfs.watchFile,这两种方法各有利弊。

fs.watch 使用文件系统事件来通知文件/目录中的更改。但这取决于操作系统,并且通知并不完全可靠,并且在许多操作系统上无法按预期工作。此外,可以创建的手表数量也可能受到限制,例如linux,我们可以用包含大量文件的程序很快耗尽它。但是因为这使用了文件系统事件,所以涉及的 CPU 周期并不多。编译器通常使用 fs.watch 来监视目录(例如,配置文件包含的源目录、模块解析失败的目录等)这些可以处理通知更改时缺少的精度。但是只有 Windows 和 OSX 支持递归观察。这意味着我们需要一些东西来替换其他操作系统上的递归性质。

fs.watchFile 使用轮询,因此涉及 CPU 周期。但是,fs.watchFile 是获取文件/目录状态更新的最可靠机制。编译器通常使用 fs.watchFile 来监视源文件、配置文件和丢失的文件(丢失的文件引用)。这意味着使用 fs.watchFile 时的 CPU 使用率取决于程序中的文件数。

使用 tsconfig.json 配置文件监视

{
  // Some typical compiler options
  "compilerOptions": {
    "target": "es2020",
    "moduleResolution": "node"
    // ...
  },

  // NEW: Options for file/directory watching
  "watchOptions": {
    // Use native file system events for files and directories
    "watchFile": "useFsEvents",
    "watchDirectory": "useFsEvents",

    // Poll files for updates more frequently
    // when they're updated a lot.
    "fallbackPolling": "dynamicPriority",

    // Don't coalesce watch notification
    "synchronousWatchDirectory": true,

    // Finally, two additional settings for reducing the amount of possible
    // files to track  work from these directories
    "excludeDirectories": ["**/node_modules", "_build"],
    "excludeFiles": ["build/fileWhichChangesOften.ts"]
  }
}

您可以在 发行说明 中阅读更多相关信息。

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

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

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

Fal2Zs2Zu8R02N4UUQtIlQcYzE+YdwDN2NOFBokcyBZUpxE3iwDEoxpbyab/qyxzwkhQu+QkfM1Gt4OuZeKFMEyA725yNm255dCz27d5dAcDwszpXV/H83tacPKut680vVmJNIKf/vvzluo4e2aNcKO1su84+jTID10NJ4MSz6/MVypg1tkWruTkgE/2LrvtRJ3JvDUMSAKpc0ZKqic+I/wbJvdnNIzhW4hEDywvOXyhAD/mmzrgzVn8PCysWKDmcQbF4HlXLCUARE9XJI7M5YIUj1S2VRubg1rAHcEetvZ546RoXksd9YBazlSt+C2dzHXNaEnA83EX1KwRHDpIW6jC9ts+gmHHrg2LDaJcH3x9vWgQMRKgdWB+BgPdGUZeIsMfuAEya0YOLZaHUpMMK6UrfKf6fSJU133rfyceLSw=

b3NkXPRqyiX5UXLNbMkxv8CP9y5aEHCqbqiUdkN/jPa3Unw8t58eZWj3KlVbXz5E7Qb9VDnC7b8ytebX6luGPHP01k9zotSCp9ew6jYnGndBs7/GQebKxGua/6hKM8bkK1pWpXxHy7UY2EEofQwF/n8sC8OSipQTrxobikE7kNJpk8RKHVzmomaoZ4EGF/dDtNvASNtuLmb2PMdOMa/t/589CQh6W8wjq2+KodeLe/CriM+2atmK5h81tNoIaDyxkXM7r/AyyzhlS9hOkGdZgbmGTAbZXquIzB9SO9yTXKf+BU3UA6IWNAeS7gYiXVICU4OIryZaWIx4T+1b8odFFAWYJHpbfC9oasdY9InAdiQjp8HB5oX1KUuiCP+6w/Dh241gdZRS7yqaV+fVMtL+flDSig45Q/RYrz+v+9rvn7w2Z0V3gQrFgkuLV5i5r2BMAJOsF7ouZbB3IH2Y8jiDLgfANSfYtC9HkQkxLjuWHVATqhjAgCOh47yyh5Mz4KxRiGZOrrtCZHnNsJo5fld0aS7yeuoAZ2BvNFf9AgDgXqIQtEsShUm0NOlqMs8ZRDGfioIh+jvDaHwxo0E2ujfPY41ZCqXw/kTXlMjwfEc+f1Twnp99IMl0ESGPtIrCYl6KLG1L4zKZAuJxlvG4SPoxFnt+JwAvkKa7gj/xjh+K+S8=