fix(runner): 删掉 vite 别名表里指向不存在包目录的 data-objectql 条目 - #3747
Merged
Conversation
`packages/runner/vite.config.ts` 的别名表里有一条 `"@object-ui/data-objectql" -> packages/data-objectql/src`,但该目录在仓库里 并不存在(`git ls-tree origin/main packages/data-objectql` 为空),该 specifier 全仓仅此一处出现,runner 的 package.json 也没有列它,零源文件 import 它。 这是 #3575 修的那张表**另一个方向**的破缺:表里有条目、对应的包却没了。 条目当前不可达(vite 的 resolve.alias 不校验 replacement 路径是否存在,不匹配 就不解析),所以删除它不改变任何运行时行为——但它有一个实际代价:#3575 在表旁 留的「重导闭包」命令必须用 `2>/dev/null` 才能压掉这条死条目产生的 `grep: packages/data-objectql/src: No such file or directory`,而那是绕过、不是 修复:一个长期存在的假条目让「表 = 闭包」这条不变量看起来是软的。 一并把该绕过换成不变量的**另一个方向**的显式检查: - 移除 `2>/dev/null`,并在注释里写明 stderr 不再被吞的原因——内层 `grep -r` 走的正是本表点名的目录,所以它报 `No such file or directory` 不是噪音,而是 「表里有条目指向不存在的目录」的告警,应当改表而不是消音; - 补一条可单独跑的死条目检查(逐个 `[ -d ]`),表干净时无输出。
|
The latest updates on your projects. Learn more about Vercel for GitHub. |
Contributor
✅ Console Performance Budget
📦 Bundle Size Report
Size Limits
|
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Fixes #3593
前提复核(在
origin/main上,按内容锚定而非行号)fetch 点
8ad6070fb。前提成立且完整:packages/runner/vite.config.ts:76(分诊时记的:76,未漂移)git ls-tree origin/main packages/data-objectql→ 空;packages/下 39 个包无此项(现存的是data-objectstack)grep -rnI data-objectql(去 node_modules/.git)→ 2 处,均在本文件::76条目本身 +:69#3575 那条点名本单的注释package.jsondependencies六个工作区包,无它逐条核对表内 15 个条目的目标目录,恰好一条死的:
改动(单文件,两处)
data-objectql是否被data-objectstack取代,删除都成立;该包若回归,加回一行别名是一件小事。2>/dev/null绕过换成不变量的显式检查——这是本单真正的技术债所在。第 2 点的方向选择值得写明:issue 正文建议的是「换成显式的目录存在性过滤」,但那个建议原本挂在「保留条目」的分支下。既然条目被删,过滤就是错的方向——它会静默跳过死条目,恰好复刻本单反对的那种「不变量看起来是软的」。因此改为失败即响:
2>/dev/null,并在注释里写明 stderr 不再被吞的理由——内层grep -r走的正是本表点名的目录,所以它报No such file or directory不是噪音,而是「表里有条目指向不存在目录」的告警;应当改表,不是消音。[ -d ]),表干净时无输出,与第一条命令「跑到不打印东西为止」的用法同构。于是这张表的两个方向现在都有机械检查:缺别名(#3575 修的方向)由
comm -13报,死条目(本单方向)由新增检查报。验证 —— 方向在跑之前先定
1. 不变量:表 = 闭包(两个方向都干净)
改后,从仓根跑新注释里的两条命令:
2. 反向验证 —— 三个方向,预测在前
把文件恢复成
origin/main版本(死条目回到表里)后:grep: packages/data-objectql/src: No such file or directory✅dead table entry: packages/data-objectql/src✅第三行是诚实的方向,不是模板预设的红:这条别名从来没被匹配过(零 importer),所以它对运行时的贡献本就是零,删除它在模块图上必然看不出差别。这正是本单判为「休眠」的依据,这里把它从推断变成了实测——
data-objectql在两次爬取里都是 0 次出现。真正会动的是诊断,而诊断按预测两条全红。3. dev server 冒烟 + 整张模块图(install-only,不 build)
干净 worktree 只跑
pnpm install,自选空闲端口--strictPort,从/src/main.tsx沿 vite 改写后的 import URL 爬全图。改后(:5237):改前(同一棵树、
origin/main版本的 config,:5238):以上数字逐项相同(2380 / 13 / 0 / 0 / 0)。与 #3599 记的 2381 差 1,是其后 #3651、#3676 改
App.tsx/main.tsx带来的,不是本次改动——因为改前基线是在同一棵树上重测的,两侧都是 2380。13 而非 14 仍是类型级的data-objectstack(esbuild 抹除,本就不进模块图),与 #3599 的分析自洽。4. 静态检查
pnpm --filter @object-ui/runner lint:23 problems(0 errors,23 warnings),与 fix(runner): 把 vite 别名表补成工作区 import 的完整传递闭包 #3599 记录的既有基线一字不差,本文件零告警。node scripts/check-control-bytes.mjs:OK (scanned 3691 tracked text file(s));另对改动文件做了越过该 gate 的自扫grep -naP '[\x00-\x08\x0b\x0c\x0e-\x1f]'→ 无命中,file判为Unicode text, UTF-8。tsconfig.json是include: ["src"],vite.config.ts不在其 program 里(fix(runner): 把 vite 别名表补成工作区 import 的完整传递闭包 #3599 的正文已点明这一点)。为它去 build 一串上游依赖换不到任何关于本改动的信号,按资源纪律略过——真正的验收证据是上面第 1/2/3 节。测试:为什么没有新增测试
改动是删掉一条永不被匹配的构建期别名 + 改注释里的一条 shell 命令。没有产品代码路径可断言;能钉住的不变量已由注释里那两条可复跑命令承担(第 1、2 节即是它们的实测)。
packages/runner现有 13 个测试从仓根跑全绿:pnpm --filter @object-ui/runner test(包级入口)在干净origin/main上就是 4 红(window is not defined),与本改动无关——已在origin/main版本上跑同一命令复现同样的4 failed | 9 passed确认,并另开 #3746 记录。changeset:无(与 #3599 的判据一致,结论相反)
#3599 补了 patch changeset,是因为它真的改了发布产物(资产数 10 → 1776、
modulePreload关掉、首屏载荷 -86%)。本次删掉的是一条匹配不到任何 import 的别名条目:rollup/vite 对未命中的 alias 不产生任何输出差异,dist 逐字节不变;另按 AGENTS.md「功能改进需 changeset,纯 bug 修复不需要」,本次是后者。故不加。坦白一句:没有跑两次完整
vite build去做 dist 字节比对——那是约 1776 个产物的两轮重构建,而「未命中的别名不影响产物」由构造即可确立,再加上第 3 节改前/改后模块图逐项相同,已足够;在共享容器里为此烧两轮重建不符合资源纪律。越界发现
pnpm --filter @object-ui/runner test在干净 main 上 4 红(包级 vitest 落到 runner 的vite.config.ts、拿不到 jsdom),仓根同一批 13 全绿。未在本 PR 修。__dirname触发 vite 8 的configLoader: 'native'告警(dev 日志里可见),已由 28 个 vite/vitest config 用__dirname,Vite 8 已警告它在未来 major 默认的configLoader: 'native'下不受支持 #3592 覆盖(open,finding,统计为 28 个 vite/vitest config 的共性问题),按「先搜再报」不另开重复单。Generated by Claude Code