TypeScript 项目引用详解
使用 composite 和 references 设置进行多包构建
TypeScript 项目引用详解 是 CoddyKit 上的免费 TypeScript Academy 课时。 这是第 1 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 TypeScript Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 TypeScript Academy 课程共包含 4 节课。
什么是项目引用
项目引用允许您将 TypeScript 代码库拆分为多个 tsconfig 项目,并让这些项目相互声明依赖,从而实现增量且隔离的构建。
// tsconfig.json (root)
{
"references": [
{ "path": "./packages/core" },
{ "path": "./packages/ui" }
]
}复合项目
每个被引用的项目都必须在其 tsconfig 中设置 "composite": true。这会启用声明缓存和依赖跟踪。
// packages/core/tsconfig.json
{
"compilerOptions": {
"composite": true,
"declaration": true,
"outDir": "./dist"
}
}使用 tsc --build 构建
请从根目录运行 tsc --build(或 tsc -b),按照依赖顺序构建所有被引用的项目。
# Build all projects
tsc --build
# Build and watch
tsc --build --watch
# Clean build outputs
tsc --build --clean增量重新构建
首次构建后,tsc --build 只会重新编译源文件或依赖发生变化的项目,从而显著加快大型代码仓库的构建速度。
# Only changed packages are rebuilt
tsc --build
# Output: 2/5 projects up to date — skipping使用声明文件
被引用的项目通过依赖项目生成的 .d.ts 文件(位于 dist/ 中)使用其依赖,而不是重新解析源 TypeScript 文件。
// packages/ui imports from packages/core
import { Button } from "@myapp/core"; // resolved via dist/index.d.ts路径配置
请在根目录 tsconfig 中设置 paths,或在 package.json 中使用 exports,以便 TypeScript 在开发期间正确解析包导入。
{
"compilerOptions": {
"paths": {
"@myapp/core": ["./packages/core/src/index.ts"]
}
}
}保持构建顺序
TypeScript 会根据引用关系图自动确定构建顺序。循环引用会被检测出来,并报告为错误。
// Circular reference error example:
// packages/core references packages/ui
// packages/ui references packages/core
// Error: Circular project referenceoutDir 与 rootDir
每个复合项目都应配置 outDir 和 rootDir,以控制输出布局,并防止文件跨包边界泄漏。
{
"compilerOptions": {
"rootDir": "./src",
"outDir": "./dist"
}
}与构建工具集成
Turborepo、Nx 和 Lerna 可与项目引用集成,根据依赖关系图缓存并并行执行构建。
// turbo.json — declare TypeScript build as a pipeline step
{
"pipeline": {
"build": { "dependsOn": ["^build"], "outputs": ["dist/**"] }
}
}监视多个项目
tsc --build --watch 会监视所有被引用的项目,并在每次变更时进行增量重新编译,为单仓库提供近乎即时的反馈。
# Terminal: tsc --build --watch
# [9:00:01 AM] Found 0 errors. Watching for file changes.回顾:项目引用
项目引用将 TypeScript 拆分为相互隔离且可缓存的构建单元。请设置 composite: true、声明 references,并使用 tsc --build,以便在单仓库中快速、正确地进行增量构建。
快速检查
项目要被另一个项目引用,必须设置哪个 tsconfig 选项?
您学到的内容
TypeScript 项目引用可以在单仓库中实现快速且隔离的构建。请配置 composite: true,通过 references 声明依赖,并使用 tsc --build 进行增量编译。
常见问题解答
「TypeScript 项目引用详解」课时是免费的吗?
是的 — 「TypeScript 项目引用详解」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 TypeScript Academy 课程的其余内容,请升级到 CoddyKit PRO。 TypeScript Academy 课程共包含 4 节课。
「TypeScript 项目引用详解」这节课中我会学到什么?
使用 composite 和 references 设置进行多包构建 你通过在浏览器中直接运行的动手代码来练习 TypeScript Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。
学习 TypeScript Academy 需要有经验吗?
无需任何先前经验。CoddyKit 上的 TypeScript Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 1 节课,共 4 节。
「TypeScript 项目引用详解」课时需要多长时间?
大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。
我能在这节 TypeScript Academy 课中编写并运行代码吗?
能。每节 TypeScript Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。
此课程中的所有课时
- TypeScript 项目引用详解
- 使用 TypeScript 配置 pnpm 工作区
- 共享类型包策略
- 单体仓库中的增量构建与缓存