越界发现,记录于 #3579(删除死入口 scripts/start-app.mjs)期间 —— 跑 pnpm --filter @object-ui/runner test 时 Vite 打在输出顶上的一条警告。标 finding 不排队:今天没有任何东西是坏的,构建和测试全绿,这只是一条指向未来 major 的预告。之所以值得记一笔:它不是一个文件的问题,是仓库级的一致模式,等 Vite 把默认值翻过去的那天会一次性全线炸,而那时再改就是在一个红着的仓库里改 28 个文件。
事实(对 origin/main @ 6d762da7a 实测)
跑任何一个带 vite config 的包的测试,都会打印:
(!) Your Vite config uses features that are unsupported by `configLoader: 'native'`,
which is planned to become the default in a future major version of Vite:
- `__dirname` (vite.config.ts:19:28). Use `import.meta.dirname` instead
Set `VITE_CONFIG_NATIVE_IGNORE_WARNING=true` to suppress this warning.
- 安装的 Vite:8.2.0。
- 用
__dirname 的 tracked config 文件:28 个(git grep -ln '__dirname' -- '*vite.config.ts' '*vite.config.mts' '*vitest.config.ts' '*vitest.config.mts'),覆盖 apps/console、根 vitest.config.mts、两个 examples/,以及 packages/ 下 23 个包(components / fields / layout / runner + 19 个 plugin-*)。
也就是说这不是某个包的疏漏,是脚手架模板一路复制出来的统一写法。
为什么现在只是 finding,不是 bug
- 当前
configLoader 默认仍是打包式加载,__dirname 照常可用,没有任何构建或测试因此失败。
- 警告本身可以用
VITE_CONFIG_NATIVE_IGNORE_WARNING=true 静音 —— 但静音是把预告删掉,不是把问题解决掉,不建议走这条。
可选方向(不预设结论)
- 批量替换成
import.meta.dirname(Node 20.11+ / 22 起可用,本仓 engines.node: ">=22" 满足)。28 个文件的机械改动,可一次做完;顺带让 native configLoader 提前可用。
- 只改新文件、存量随手改 —— 成本分摊,但会长期处于两种写法并存的状态,且没有任何机制阻止新文件继续用
__dirname。
- 若选方向 1,可考虑补一条 lint/gate 钉住(禁止在 vite/vitest config 里出现
__dirname),否则模板复制会把它再长回来 —— 这一条是让改动不退化的关键,单纯替换一遍过两个月就会有新文件带着旧写法进来。
建议的判断顺序
先确认维护者是否打算跟进 Vite 的 native configLoader。若打算,方向 1 + 方向 3 的 gate 一起做才有意义;若暂不跟进,原样搁置也完全可以接受 —— 这条 issue 的价值就是让它在 Vite 翻默认值时是已知项而不是突发事故。
Generated by Claude Code
越界发现,记录于 #3579(删除死入口
scripts/start-app.mjs)期间 —— 跑pnpm --filter @object-ui/runner test时 Vite 打在输出顶上的一条警告。标finding不排队:今天没有任何东西是坏的,构建和测试全绿,这只是一条指向未来 major 的预告。之所以值得记一笔:它不是一个文件的问题,是仓库级的一致模式,等 Vite 把默认值翻过去的那天会一次性全线炸,而那时再改就是在一个红着的仓库里改 28 个文件。事实(对
origin/main@6d762da7a实测)跑任何一个带 vite config 的包的测试,都会打印:
__dirname的 tracked config 文件:28 个(git grep -ln '__dirname' -- '*vite.config.ts' '*vite.config.mts' '*vitest.config.ts' '*vitest.config.mts'),覆盖apps/console、根vitest.config.mts、两个examples/,以及packages/下 23 个包(components / fields / layout / runner + 19 个 plugin-*)。也就是说这不是某个包的疏漏,是脚手架模板一路复制出来的统一写法。
为什么现在只是 finding,不是 bug
configLoader默认仍是打包式加载,__dirname照常可用,没有任何构建或测试因此失败。VITE_CONFIG_NATIVE_IGNORE_WARNING=true静音 —— 但静音是把预告删掉,不是把问题解决掉,不建议走这条。可选方向(不预设结论)
import.meta.dirname(Node 20.11+ / 22 起可用,本仓engines.node: ">=22"满足)。28 个文件的机械改动,可一次做完;顺带让 native configLoader 提前可用。__dirname。__dirname),否则模板复制会把它再长回来 —— 这一条是让改动不退化的关键,单纯替换一遍过两个月就会有新文件带着旧写法进来。建议的判断顺序
先确认维护者是否打算跟进 Vite 的 native configLoader。若打算,方向 1 + 方向 3 的 gate 一起做才有意义;若暂不跟进,原样搁置也完全可以接受 —— 这条 issue 的价值就是让它在 Vite 翻默认值时是已知项而不是突发事故。
Generated by Claude Code