Skip to content

28 个 vite/vitest config 用 __dirname,Vite 8 已警告它在未来 major 默认的 configLoader: 'native' 下不受支持 #3592

Description

@yinlianghui

越界发现,记录于 #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 静音 —— 但静音是把预告删掉,不是把问题解决掉,不建议走这条。

可选方向(不预设结论)

  1. 批量替换成 import.meta.dirname(Node 20.11+ / 22 起可用,本仓 engines.node: ">=22" 满足)。28 个文件的机械改动,可一次做完;顺带让 native configLoader 提前可用。
  2. 只改新文件、存量随手改 —— 成本分摊,但会长期处于两种写法并存的状态,且没有任何机制阻止新文件继续用 __dirname
  3. 若选方向 1,可考虑补一条 lint/gate 钉住(禁止在 vite/vitest config 里出现 __dirname),否则模板复制会把它再长回来 —— 这一条是让改动不退化的关键,单纯替换一遍过两个月就会有新文件带着旧写法进来。

建议的判断顺序

先确认维护者是否打算跟进 Vite 的 native configLoader。若打算,方向 1 + 方向 3 的 gate 一起做才有意义;若暂不跟进,原样搁置也完全可以接受 —— 这条 issue 的价值就是让它在 Vite 翻默认值时是已知项而不是突发事故。


Generated by Claude Code

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions