把 utils 拆出来之后 ui 引 utils、utils 又引 ui 里的常量,pnpm 装得上,turbo run build 报 There is a cycle in the graph,两个包的 build 都不执行。日志里能对上时间点,这种反而好排。
workspace 只按包名做软链,不检查依赖方向,装包阶段看不出环。任务编排器要按依赖拓扑排序,一旦成环就没有合法的执行顺序,只能整体报错。这一点先确认清楚,后面就不用反复试。
pnpm list -r --depth 0 npx turbo run build --dry-run npx madge packages/utils/src --circular
这次卡住的地方就在「workspace 循环依赖」这一环,单独把它拎出来验证,别和其他改动混在同一次发布里。能分两步做的操作就别合成一步,中间看一眼返回值,出问题好判断。
报错里带路径的,先去看那个路径在不在、权限对不对。同一份配置存在多处的,先确认改的是被加载的那一份。
处理上按这个顺序:用 pnpm list --depth 0 -r 看两包互相出现在 dependencies 里;把共享常量抽到第三个包 断开反向引用;确实需要回调就用依赖注入 不要在模块顶层 import 对方;改完跑 turbo run build --dry-run 确认任务图没有环。
结果对不对很好判断,dry-run 输出里两个包按顺序排列 不再提示 cycle。
