TypeScript 中的 composite
说明 composite 为什么是 project references 的基础,以及它会给 rootDir、include 和 declaration 带来哪些约束。
#tech / dev
#resource / typescript
#type / concept
#status / growing
[!info] related notes
TypeScript 中的 composite
一句话定义
composite 会把当前项目变成“可被其他 TypeScript 项目引用的构建单元”。
核心机制 / 工作原理
当开启 composite 时,TypeScript 会进入一种更严格、也更适合项目级增量构建的模式。
官方文档强调,它会带来几件事:
- 如果没显式设置
rootDir,默认值变成tsconfig所在目录 - 所有实现文件都必须被
include或files覆盖 declaration默认为true
最小例子 / 最小场景
{
"compilerOptions": {
"composite": true,
"declaration": true
}
}
常见用途
- project references
- monorepo 中的库包
- 需要增量 build 与跨项目类型消费的仓库
边界与易混淆点
composite 不只是“更快”
它的意义不只是性能,还包括:
- 输出边界更清晰
- 引用关系更显式
- build mode 更可控
composite 会让一些以前“能混过去”的配置暴露问题
比如:
- 文件没被 include 到
rootDir不明确- 声明文件策略没配好
参考信息
- TSConfig
composite: https://www.typescriptlang.org/tsconfig/composite.html - Project References: https://www.typescriptlang.org/docs/handbook/project-references