fix: Nuxt DevTools (vite-plugin-inspect) breaks oxc-walker's parseSync resolution, causing oxc-walker: could not resolve a parseSync implementation across many plugin transforms
维护者通常 1 天内回复
还没有人认领这个 Issue。
评估
- 难度
- 4/5
- 预计耗时
- 3-5 天
- 新手友好度
- 38/100
- Issue 类型
- 缺陷
- 描述清晰度
- 基本清楚
- 活跃度
- 活跃
- 技术栈
- nuxt, typescript, vite
调研方向
首先,在启用 DevTools 的情况下使用 npm run dev 或 npm run build 重现 Nuxt starter kit 中的故障。通过 vite-plugin-inspect 跟踪转换路径,直到 oxc-walker's resolveParseSync 和 Nuxt 的 keyed-functions compiler macro;当 oxc-parser 成功解析且报告的转换错误消失,同时不禁用 DevTools 时,即表示完成。
由索引模型根据 Issue 内容生成。
描述
🐛 The bug
Summary
When Nuxt DevTools is enabled, plugin/component transforms that rely on oxc-walker (via @unhead, Nuxt's internal keyed-functions compiler macro, nuxt-schema-org, nuxt-auth-sanctum, etc.) intermittently or consistently fail with:
oxc-walker: could not resolve a parseSync implementation. Install oxc-parser or rolldown (and use rolldown/utils), or pass a parseSync function via the parseAndWalk options.
Disabling DevTools (devtools: { enabled: false } in nuxt.config.ts) makes the error disappear entirely and permanently, across every environment we tested.
Environment
Nuxt: 4.4.8 and 4.5.2 (reproduced on both)
Vite: 7.3.6 and 8.2.2 (reproduced on both — not specific to Vite 8/Rolldown)
Node: v26.8.1
npm: 12.0.2
OS: macOS (Darwin 25.6.0), Apple Silicon (arm64)
oxc-parser: 0.147.0 (installed and working correctly when tested standalone via node -e "require('oxc-parser').parseSync")
oxc-walker: 1.1.1
Reproduction
Any Nuxt project with devtools enabled (the default) and any module that triggers oxc-walker-based static analysis on plugins/components (this reproduces even on the official Nuxt starter kit — no extra modules required beyond what DevTools itself needs).
Run npm run dev (or npm run build).
Errors/warnings appear referencing multiple internal Nuxt plugin files (payload.client.js, revive-payload.*.js, router.js, unhead.js, user components like AppFooter.vue, etc.), each pointing to oxc-walker's resolveParseSync.
Example full stack trace (dev mode, triggered from a Vue component via Nuxt's keyed-functions compiler macro):
[plugin:nuxt:compiler:keyed-functions] oxc-walker: could not resolve a parseSync implementation. Install oxc-parser or rolldown (and use rolldown/utils), or pass a parseSync function via the parseAndWalk options.
/path/to/project/app/components/app/AppFooter.vue
at resolveParseSync (node_modules/oxc-walker/dist/index.mjs:174:8)
at parseAndWalk (node_modules/oxc-walker/dist/index.mjs:196:29)
at TransformPluginContext.handler (node_modules/nuxt/dist/index.mjs:4754:29)
at async file:///.../node_modules/vite-plugin-inspect/dist/shared/vite-plugin-inspect.Fv_Ybe1l...
at async EnvironmentPluginContainer.transform (node_modules/@nuxt/vite-builder/node_modules/vite/dist/...)
at async loadAndTransform (node_modules/@nuxt/vite-builder/node_modules/vite/dist/...)
at async viteTransformMiddleware (node_modules/@nuxt/vite-builder/node_modules/vite/dist/...)
Note that vite-plugin-inspect (bundled with/used by Nuxt DevTools) sits directly in the transform call stack, between Vite's plugin container and the point where oxc-walker fails to resolve parseSync.
Expected behavior
oxc-walker should resolve parseSync from oxc-parser regardless of whether DevTools/vite-plugin-inspect is wrapping the transform pipeline.
Actual behavior
With DevTools enabled, oxc-walker's internal resolveParseSync() (which uses createRequire(import.meta.url) from its own module location) fails to locate oxc-parser, even though:
oxc-parser is correctly installed and resolvable via both require() and dynamic import() when tested standalone.
npm ls oxc-parser and npm ls oxc-walker show a single, deduplicated version each across the whole dependency tree.
This strongly suggests vite-plugin-inspect's transform wrapping changes the module context (e.g. import.meta.url, or how the transform function is invoked/bound) in a way that breaks oxc-walker's createRequire-based resolution of oxc-parser.
Confirmed fix
ts
// nuxt.config.ts
export default defineNuxtConfig({
devtools: { enabled: false },
})
After disabling DevTools and restarting the dev server (with .nuxt and node_modules/.vite cleared for good measure), the error disappears completely and does not return, across multiple terminal environments (plain Terminal.app and VS Code's integrated terminal) and across both a dev-only session and a build → dev cycle.
🛠️ To reproduce
🌈 Expected behavior
ℹ️ Additional context
p.s. bugreport generated with Claude AI.
- 主要语言
- TypeScript
- 星标
- 3.3k
- 派生
- 217
- 平均合并
- 1 天 4 小时
- 30 天内合并 PR
- 21
环境准备
- 没有 Dockerfile 或 Docker Compose 文件
- 没有 Pull Request 模板
- 阅读贡献指南
从这里开始
- 先读完整个 Issue,再读项目的贡献指南。
- 在 Issue 下留言说明你要接手 —— 这能避免两个人做同样的事。
- Fork 仓库,在一个分支上完成修改。
- 提交 Pull Request,并在描述里引用这个 Issue 编号。
nuxt/devtools 的其他 Issue
-
fix: Inspect panel styles break when host page sets a custom html font-size (rem-based units)可能重新可做 关联的 PR 已关闭且未合并。 未关闭bug
难度 2/5 1-3 小时 新手友好度 72/100
维护者通常 1 天内回复
-
bug
难度 2/5 1-3 小时 新手友好度 72/100
维护者通常 1 天内回复
-
难度 3/5 半天 新手友好度 42/100
维护者通常 1 天内回复
-
bug
难度 3/5 1-2 天 新手友好度 65/100
维护者通常 1 天内回复
-
bug
难度 3/5 1-2 天 新手友好度 65/100
nuxt/devtools#1100 · 2 个 reaction ·
维护者通常 1 天内回复
相似的 Issue
-
难度 2/5 1-3 小时 新手友好度 74/100
AvaProtocol/ava-sdk-js#276 ·
维护者通常 1 天内回复
-
难度 2/5 1-3 小时 新手友好度 75/100
apollographql/apollo-client#13493 ·
维护者通常 1 天内回复
-
Custom hosts written as trailing-dot FQDNs (`host.local.`) aren't detected as local backends可能已有人在做 @roboomp 今天认领。 未关闭bug prio:p2 providers triaged
难度 2/5 1-3 小时 新手友好度 82/100
can1357/oh-my-pi#15798 · 3 条评论 ·
维护者通常 1 天内回复
-
难度 2/5 1-3 小时 新手友好度 62/100
code-yeongyu/oh-my-openagent#10172 ·
维护者通常 1 天内回复
-
难度 2/5 1-3 小时 新手友好度 70/100
PDFCraftTool/pdfcraft#189 ·