本地同时开发 ui 和 web,改 packages/ui/src 下的组件,web 的 dev 页面刷新后样式没变,重启一次要等 40 秒才出现。ui 包的 main 指向 dist/index.js。碰到这种情况,我一般先确认改动有没有真的生效。

原因不复杂,workspace 软链只解决包解析,运行时读的还是 package.json 里 main 或 exports 指向的构建产物,源码改了不重新构建就不会生效。dev 服务器还会把依赖预构建结果缓存起来。

碰到「workspace 链接调试」这类问题,我习惯先把当前配置原样备份一份,改坏了立刻换回来,不用现场推。报错里带路径的,先去看那个路径在不在、权限对不对。

ls -l node_modules/@acme/ui
pnpm --filter @acme/ui dev
pnpm --filter @acme/web dev

同一份配置存在多处的,先确认改的是被加载的那一份。新版本先放一台机器上跑一天再全量,问题一般在这段时间暴露。

备份不是备了就行,恢复一次才算数,很多备份文件打开才发现是空的。

具体做法是,把 ui 包的 exports 在开发条件指向 src/index.ts;用 pnpm --filter @acme/ui dev 起 watch 构建;vite 配置里把该包从 optimizeDeps.exclude 排除预构建;确认 node_modules 里是指向源码目录的软链。

最后用这个标准收尾,改 ui 源码后 web 页面热更新立即变化 不需要重启 dev 服务器。

作者 9823189