From 2744434d311f1771eb27f1ce79dcdfbd329e866b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=AE=B7=E4=BA=AE=E8=BE=89?= Date: Sat, 8 Aug 2026 11:11:43 +0000 Subject: [PATCH] =?UTF-8?q?fix(runner):=20=E5=88=A0=E6=8E=89=20vite=20?= =?UTF-8?q?=E5=88=AB=E5=90=8D=E8=A1=A8=E9=87=8C=E6=8C=87=E5=90=91=E4=B8=8D?= =?UTF-8?q?=E5=AD=98=E5=9C=A8=E5=8C=85=E7=9B=AE=E5=BD=95=E7=9A=84=20data-o?= =?UTF-8?q?bjectql=20=E6=9D=A1=E7=9B=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit `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 ]`),表干净时无输出。 --- packages/runner/vite.config.ts | 20 ++++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) diff --git a/packages/runner/vite.config.ts b/packages/runner/vite.config.ts index f0c21b7b4..f4b4a9ede 100644 --- a/packages/runner/vite.config.ts +++ b/packages/runner/vite.config.ts @@ -51,7 +51,7 @@ export default defineConfig({ // <(grep -rhP "(?/dev/null \ + // | sort -u | sed 's|^|packages/|;s|$|/src|') \ // | grep -vP '^\s*(\*|//)' \ // | grep -oP "['\"]\K@object-ui/[a-z0-9-]+" | sort -u) // @@ -65,15 +65,27 @@ export default defineConfig({ // - `grep -vP '^\s*(\*|//)'` drops JSDoc/line-comment examples such as // `* () => import('@object-ui/plugin-grid')` in react/LazyPluginLoader // and core/registry/Registry.ts, which are documentation, not edges; - // - `2>/dev/null` tolerates a table entry whose package dir no longer - // exists (`data-objectql` is such a leftover — objectui#3593). + // - stderr is deliberately NOT redirected to /dev/null. The inner + // `grep -r` walks exactly the dirs this table names, so a + // `No such file or directory` from it is not noise: it means the + // *other* direction of the invariant is broken — an entry below points + // at a package dir that does not exist. Fix the table; never silence + // the message. (objectui#3593: a `data-objectql` entry outlived its + // package because a `2>/dev/null` here kept it quiet.) + // + // That second direction, checkable on its own — prints nothing when the + // table is clean, one line per dead entry otherwise: + // + // grep -oP 'packages/\K[a-z0-9-]+(?=/src")' packages/runner/vite.config.ts \ + // | sort -u | sed 's|^|packages/|;s|$|/src|' \ + // | while read -r d; do [ -d "$d" ] || echo "dead table entry: $d"; done + // // Type-only imports are invisible to Vite's esbuild dependency scan but // still belong in the table — see `data-objectstack` below. "@object-ui/components": path.resolve(__dirname, "../../packages/components/src"), "@object-ui/react": path.resolve(__dirname, "../../packages/react/src"), "@object-ui/core": path.resolve(__dirname, "../../packages/core/src"), "@object-ui/types": path.resolve(__dirname, "../../packages/types/src"), - "@object-ui/data-objectql": path.resolve(__dirname, "../../packages/data-objectql/src"), "@object-ui/plugin-kanban": path.resolve(__dirname, "../../packages/plugin-kanban/src"), "@object-ui/plugin-charts": path.resolve(__dirname, "../../packages/plugin-charts/src"),