VSCode对Remix支持需同步解决三类问题:一是tsconfig.json的"types"必须包含"@remix-run/dev"以启用loader/action类型提示;二是launch.json需配置"sourceMaps":true和正确"resolveSourceMapLocations"以使断点命中;三是entry.client.tsx默认不被HMR监听,需手动重启或启用future.v3_routeConvention优化。

VSCode 对 Remix 项目的支持不是开箱即用的,loader/action 类型报错、断点不命中、JSX 高亮异常,根本原因就三个:TypeScript 没加载 @remix-run/dev 类型声明、source map 路径映射没配对、HMR 默认不监听 entry.client.tsx。
loader/action 类型不识别:缺 @remix-run/dev 类型声明
现象是写 export function loader() 就报 Cannot find name 'loader',参数也无提示。这不是 VSCode 抽风,而是 TS 语言服务压根不知道这些函数该有啥签名。
-
tsconfig.json的"types"字段必须显式包含"@remix-run/dev"(不是@remix-run/node,也不是remix) - 检查
node_modules/@remix-run/dev/index.d.ts是否真实存在;若用 pnpm 或 yarn PnP,类型可能因链接失效而未被加载,可临时切回npm install验证 - 在任意
.tsx路由文件顶部加一行import "@remix-run/dev";——仅用于触发 TS 类型注册,运行时无任何副作用
VSCode 断点显示空心圆:source map 解析路径没对上
按 F5 启动调试后断点变空心圆,说明 VSCode 找不到源码对应关系。Remix 的 remix dev 用 esbuild 生成 inline source map,但 Node.js 调试器需要明确告诉它“去哪找源文件”。
-
.vscode/launch.json中调试配置必须设为"type": "node"、"request": "launch" -
"runtimeExecutable"设为"npx","runtimeArgs"设为["remix", "dev"] - 必须启用
"sourceMaps": true,并严格设置"resolveSourceMapLocations"为["${workspaceFolder}/**", "!**/node_modules/**"] - 禁用
nodemon或concurrently包裹remix dev——它们会破坏进程父子链路,VSCode attach 不到真实 Node 实例
修改 entry.client.tsx 不触发 HMR:Remix 默认不监听入口文件
改了客户端入口,浏览器没刷新,控制台也没 HMR 日志。这不是 bug,是 Remix 的设计取舍:HMR 只监听路由模块(routes/**)和资源文件(app/*),entry.* 文件不在默认监听范围内。
- 最稳妥的做法是手动重启
npm run dev - 若需局部热替换,可在
remix.config.js中开启future.v3_routeConvention: true(v2.10+),再配合unstable_singleFetch: true提升客户端更新粒度 - 避免在
entry.client.tsx写业务逻辑;它只应做ReactDOM.createRoot(...).hydrate(),把逻辑下沉到root.tsx或自定义 hook
真正容易被忽略的是类型声明与 source map 的耦合性:哪怕 tsconfig.json 配对了,launch.json 里 resolveSourceMapLocations 路径写错一个字符,断点照样失效;反过来,source map 路径全对,但 types 没加 @remix-run/dev,loader 参数提示永远是 any。这两件事必须同时做对,缺一不可。











