网站搜索

typescript - tsc-watch 会使用 TSC_NONPOLLING_WATCHER 吗?


我正在进行微服务集成项目。我同时运行 8 个 TypeScript 服务,使用 tsc-watch --preserveWatchOutput --onSuccess 'node build/index.js'。

这些进程消耗了我 70% 的 CPU,即使我完全没有编写任何源代码。我猜测有一些变化检测正在进行轮询,并且我在谷歌上搜索得知,将环境变量 TSC_NONPOLLING_WATCHER 设置为 "1" 可以停止轮询。

这是提示的来源:https://medium.com/@julioromano/writing-typescript-on-a-laptop-this-might-improve-your-battery-life-f503dd16f019

然而,它似乎完全没有效果。此外,作者提到的是“tsc -w”,而不是 tsc-watch。我不太明白 tsc -w 和 tsc-watch 之间的区别是什么。

我会感激任何帮助。

答案#1

更新 1 不需要更改 tsconfig.json

我遇到了类似的问题,并打算通过正确设置环境变量 TSC_NONPOLLING_WATCHER="1" 来解决它。

在我的情况下,我不得不通过调整 .zprofile 来进行

export TSC_NONPOLLING_WATCHER="1"

你可以通过在命令行中运行 echo $TSC_NONPOLLING_WATCHER 来测试它。

替代

如果这没有帮助,尝试将 tsconfig.json 文件设置为以下内容:

"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"
}

这些选项来自: https://www.typescriptlang.org/docs/handbook/configuring-watch.html,我强烈建议在进行任何更改之前阅读它。

tsc 与 tsc-watch

关于 tsc -w 和 tsc-watch 的区别,GitHub 上的项目声称,我引用一下:

  • tsc-watch 正在使用当前安装的 TypeScript 编译器。
  • tsc-watch 并没有改变编译器,它只是添加了新的参数,编译过程保持不变,其他所有参数也都相同。

所以 tsc 的所有设置在 tsc-watch 中也应该像你这种情况一样工作。