hmr日志输出但dom无反应,是codex运行时注入层与构建工具信道静默断裂;需验证hmr开关、检查server.watch.ignored误删注入目录、确保import.meta.hot在入口主动调用并完成卸载重挂载流程。
☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 多模态理解力帮你轻松跨越从0到1的创作门槛☜☜☜

当你在 Windows 或 macOS 上运行 Codex 项目时,修改组件文件后浏览器界面毫无反应,控制台既不报错也不刷新,【HMR 日志照常输出但 DOM 完全不动】——这不是 Vite 或 Webpack 坏了,而是 Codex 运行时注入层与构建工具的热更新信道在静默断裂。
确认 HMR 是否真被启用
先验证基础开关是否打开:打开 vite.config.ts 或 webpack.config.js,搜索 hmr 字段。
方法一(Vite):检查 server.hmr 必须显式设为 true,不能依赖默认值。若配置中存在 server: { hmr: false } 或整段 server 被注释,HMR 就是关闭状态。
方法二(Webpack):确认 devServer.hot 和 devServer.watchOptions 同时生效,缺一不可。仅设 hot: true 但没配 watchOptions,在 macOS 的 APFS 或 Windows 的 WSL2 环境下极易失灵。
注意:Codex 5.4+ 要求 import.meta.hot 在入口模块中被主动调用,否则即使构建工具 HMR 开启,Codex 运行时也不会注册热替换逻辑。
排查文件监听失效的三大断点
第一步:检查 server.watch.ignored 是否误删了 Codex 的 runtime 注入目录。默认忽略 **/node_modules/** 没问题,但如果项目里把 Codex 插件或自定义 loader 放在 src/plugins/codex-hot 这类路径下,而你又加了 **/src/** 到 ignored 列表,那整个热更新链就断了。
第二步:在终端执行 npm run dev 后,观察启动日志里是否有 Watch enabled 或 File watching enabled 提示。没有?说明 chokidar 根本没启动,大概率是 usePolling 在 NFS 或 Docker Desktop 共享卷上被强制禁用导致的。
第三步:对 Windows 用户,立刻执行 codex --version 验证 CLI 是否可用;对 macOS 用户,运行 which codex 确认全局命令路径是否纳入 shell 的 $PATH。【Codex CLI 不可达,Vite/Webpack 的 HMR 就永远收不到 import.meta.hot 接入信号】
通过本地 Codex 或 OpenClaw OAuth 凭证直接调用 ChatGPT/Codex Responses 的 image_generation 工具来生成或编辑光栅图像,然后保存
修复 Codex 特有的模块注入冲突
① 打开项目入口文件(通常是 main.ts 或 index.tsx),找到 import.meta.hot.accept 调用位置。
② 检查该回调函数内部是否包含 app.unmount() → createApp() → app.mount() 的完整重挂载流程。Codex 5.4 要求必须手动卸载旧实例,否则新模块加载后会因引用残留导致状态冻结。
③ 若使用 React,确认已安装 @vitejs/plugin-react 并启用 fastRefresh: true;若用 Vue,必须确保 defineComponent 导出且无顶层 console.log 或副作用语句——Codex 运行时会拦截非标准 ESM 导出,导致 import.meta.hot.accept 注册失败。
④ 最后,在浏览器 DevTools 的 Console 中手动输入 import.meta.hot,回车。如果返回 undefined,说明当前模块未被 Vite/Webpack 视为热更新可接受模块,根源一定是文件路径大小写错误或动态 import 路径含变量。
验证 WebSocket 通信是否被拦截
方法1:打开 Chrome DevTools → Network → WS 标签页,启动开发服务器后刷新页面,看是否有 ws://localhost:3000/@vite/client 或 ws://localhost:8080/sockjs-node 连接建立成功。连接状态显示 Failed 或 Closed,说明 Service Worker 或代理规则正在拦截。
方法2:在 Application → Service Workers 页面,点击 “Unregister” 清除所有已注册 SW。Codex 项目若混用 PWA 插件,旧 SW 会劫持 HMR WebSocket 请求并静默丢弃。
方法3:临时关闭所有浏览器扩展(尤其广告拦截、隐私保护类),再试一次热更新。某些扩展会主动屏蔽 ws:// 协议连接,且不提示任何警告。










