Skip to content

Project Reference优化编译性能

TypeScript 的 Project References 特性为大型项目提供了一种有效的方式来优化编译性能。这种特性允许开发者将复杂的项目分解成多个较小的、独立的部分,每个部分都有自己的 tsconfig.json 文件,并且可以相互引用。这种方式有助于减少不必要的重新编译,从而提高构建速度。

Project References 是 TypeScript 3.0 引入的一个新功能

使用方法

  1. 创建独立的 tsconfig.json 文件:对于每一个相对独立的模块(比如前端代码和后端代码),都应该有一个独立的 tsconfig.json 文件,并且在这些文件中设置 "composite": true。这个选项是必要的,因为它确保了 TypeScript 可以快速确定在哪里查找引用项目的输出 。

  2. 配置根目录下的 tsconfig.json:在项目的根目录下创建一个主 tsconfig.json 文件,并在这个文件中添加 references 字段来引用各个子模块的 tsconfig.json 文件 。

  3. 使用 tsc --build 或 tsc -b 命令:不同于传统的 tsc 编译命令,当使用 Project References 时,应该使用 tsc --build 或者简写的 tsc -b 来触发增量构建。这将告诉 TypeScript 构建系统只编译那些发生变化的部分以及依赖于这些变化的部分 。

  4. 利用缓存机制:当启用 Project References 并使用 --build 标志时,TypeScript 将生成 .tsbuildinfo 文件。此文件记录了哪些文件被编译过及其哈希值。下次编译时,如果源文件没有更改,TypeScript 就会跳过该文件的编译过程 。

  5. 控制模块间的依赖关系:通过合理地设计模块之间的依赖关系,你可以进一步减少不必要的编译工作。例如,如果你知道某些模块之间几乎没有交互,那么就可以避免让它们互相引用,从而降低耦合度 。

  6. 考虑微服务架构:对于特别庞大的项目,可能需要考虑将其分割为多个独立的服务或者库,每个服务或库都作为一个独立的项目存在,这样不仅能够改善编译性能,还能增强团队协作效率 。

实际案例分析

假设你有一个包含前后端代码的单个仓库,如果没有 Project References,执行 tsc 时会对所有模块进行类型检查和转译,即使只修改了前端代码。有了 Project References 后,当你仅改动了前端部分的代码,只需重新构建前端模块即可,而后端模块的构建产物无需重建 。