`rush build` 和 `tsc -b` 一起玩得好吗?

Do `rush build` and `tsc -b` play nice together?

我正在探索 Rush/PNPM 和带有项目引用和增量构建的 Typescript,但我对这两者中哪一个最适合管理增量构建感到有点困惑。

如果我使用内置命令 rush build 增量构建,我认为 Rush 正确地识别了所有已知项目的 package.json 声明中的依赖关系并运行 build 他们每个人的脚本依赖顺序。如果每个打字稿项目的 build 脚本是 ./node_modules/.bin/tsc -b . 那么树上的每个依赖项都将按依赖项顺序构建。

其中,tsc 还将根据其 references path 列表评估 package.json 依赖项。理想情况下,它会(?)认识到其依赖项的早期独立构建使它们成为最新的并且不需要重建,然后只构建直接项目的代码作为其 rush build 调用构建的一部分。如果这甚至是可靠和稳定的,这似乎充其量是不必要的依赖树评估,对吧?

我尝试将 rush 的 build bulk 命令覆盖到命令-line.json 中的 ignoreMissingScript,并且只在最顶层应用程序的 package.json。 (这个想法是在子项目中使用替代 build-me 或其他任何东西,以防万一我真的只想重建其中一个并且出于某种原因只重建其依赖项。)由于批量命令的性质,Rush 发出有关跳过构建和缺少脚本的消息,这可能会误导开发人员。此外,我不相信所有项目都在编译 - 例如,我没有看到生成的 js 文件 - 也许这是一个不相关的问题。

我没有看到任何简单的 Rush 配置可以推迟到打字稿 - 我们不允许将 build 命令行覆盖为 global 风格的 shell 命令.我觉得我真的只希望 Rush 用于包管理而不是脚本-运行(因为它太受限制了)。而且,我不能轻易阻止 rush build 支持 运行 主项目的打字稿增量构建的其他方式。我很惊讶没有找到任何相关的搜索结果,因为这两个都是 Microsoft 的前沿项目。我错过了一些基本的东西吗?

来自https://github.com/microsoft/rushstack/issues/2368

Right now the two don't directly interoperate.

If you run a Rush incremental build command (like the OOB rush build command), Rush will rebuild projects that have files that aren't .gitignored whose hashes have changed since the last time the command was run.

Heft's incremental TypeScript build only rebuilds individual TS files that haven't changed since the last time heft build was run. If you don't run heft clean --clear-cache before running a project's heft build command, then the build will be incremental if a valid incremental state exists in project's Heft build cache folder (/.heft/build-cache). This will happen regardless of whether you run an incremental Rush build command or not.

Does that make sense?