Background
With a 9-package monorepo spanning Docusaurus docs, Next.js apps, TypeScript libraries, and Discord/API services, full workspace rebuilds are slow and I/O-intensive. Currently, pnpm -r build compiles all packages sequentially regardless of what changed, taking 30+ seconds even when only one file is modified.
Problem
- No incremental compilation: Each
pnpm build runs tsc fresh, recompiling all TypeScript files
- No build cache: TypeScript doesn't persist compilation state between runs
- No dependency awareness: Packages rebuild even if their dependencies didn't change
- Slow iteration: Developers wait for full builds during development cycles
This becomes critical in a Stellar/Soroban migration where frequent iterative changes are expected.
Expected Outcome
- TypeScript incremental mode enabled across all packages
- Build times reduced for incremental changes (3-5s vs. 30+s)
- Clear build cache strategy documented
- Developer experience improved for fast iteration
Suggested Implementation
-
Enable incremental compilation in tsconfig.base.json:
{
"compilerOptions": {
"incremental": true,
"tsBuildInfoFile": "./dist/.tsbuildinfo",
"composite": false
}
}
-
(Optional) Use TypeScript project references for monorepo builds:
- Create a root
tsconfig.json with references to each package's tsconfig.json
- Use
tsc -b (build mode) instead of tsc to leverage project references
- Enables true incremental, dependency-aware builds
-
Add .tsbuildinfo to .gitignore (build artifact)
-
Update build scripts:
"build": "tsc -b",
"build:clean": "rm -rf dist .tsbuildinfo && tsc"
-
Benchmark:
time pnpm -r build # First run: full compile
echo '// change' >> packages/contracts/src/index.ts
time pnpm -r build # Second run: incremental
-
Document in monorepo README.md:
## Build Caching
- Incremental builds are enabled by default
- First build is slower; subsequent builds reuse cached data
- Clean builds: `pnpm build:clean`
Acceptance Criteria
Affected Files/Directories
tsconfig.base.json or each packages/*/tsconfig.json
.gitignore (add .tsbuildinfo)
README.md (document build caching)
Background
With a 9-package monorepo spanning Docusaurus docs, Next.js apps, TypeScript libraries, and Discord/API services, full workspace rebuilds are slow and I/O-intensive. Currently,
pnpm -r buildcompiles all packages sequentially regardless of what changed, taking 30+ seconds even when only one file is modified.Problem
pnpm buildrunstscfresh, recompiling all TypeScript filesThis becomes critical in a Stellar/Soroban migration where frequent iterative changes are expected.
Expected Outcome
Suggested Implementation
Enable incremental compilation in
tsconfig.base.json:{ "compilerOptions": { "incremental": true, "tsBuildInfoFile": "./dist/.tsbuildinfo", "composite": false } }(Optional) Use TypeScript project references for monorepo builds:
tsconfig.jsonwithreferencesto each package'stsconfig.jsontsc -b(build mode) instead oftscto leverage project referencesAdd
.tsbuildinfoto.gitignore(build artifact)Update build scripts:
Benchmark:
Document in monorepo
README.md:Acceptance Criteria
tsconfig.base.json(or each package's tsconfig).tsbuildinfofiles are created in each package'sdist/.tsbuildinfois ignored by GitAffected Files/Directories
tsconfig.base.jsonor eachpackages/*/tsconfig.json.gitignore(add.tsbuildinfo)README.md(document build caching)