pnpm workspace 里让 app 引用 packages/ui,tsc 报 TS6305 Output file 'ui/dist/index.d.ts' has not been built from source file 'ui/src/index.ts'。dist 里那个文件明明在。碰到这种情况,我一般先确认改动有没有真的生效。
原因不复杂,项目引用要求被引用的包先构建,编译器会比对产物和源码的路径映射与构建信息。composite 没开或者 tsbuildinfo 缺失时,这份产物不被承认为有效结果。
「TS6305 项目引用」这类改动最怕改一半,回滚脚本先准备好,再动生产。日志级别临时调高可以,记得改回去,长期开着既占磁盘又掩盖真问题。
npx tsc -b packages/ui --force npx tsc -b apps/web // packages/ui/tsconfig.json 里开 composite 和 declaration
权限不要一口气开到最大,先加到够用再往上试,范围小才好收。把复现步骤压到三条以内,交给同事也能跑出来,才算真的定位清楚。
改动写完就同步给同事,下一个人踩同一个坑,成本还是你的。
具体做法是,确认被引用的包开了 composite 并声明了 declaration;先构建依赖包 再构建上层 不要反过来;用构建模式跑 它会按依赖顺序自己排;把 dist 从版本控制里去掉 避免拿到别人的旧产物。
最后用这个标准收尾,TS6305 消失 从干净目录 clone 之后一次 tsc -b 就能全量构建通过。
