VS Code 调试 Meteor 必须手动配置 launch.json,因 Meteor 由 CLI 启动复合进程,非普通 Node.js 服务;需分“Meteor: Node”“Meteor: Chrome”“Meteor: All”三部分配置,且依赖 .meteor/ 目录、函数内断点、精确 webRoot 路径及 compounds 时序。

VS Code 无法直接调试 Meteor 应用,必须手动写 launch.json,否则断点全失效——这是最常卡住人的地方。
为什么默认配置完全不 work
Meteor 不是普通 Node.js 服务,它靠 meteor CLI 启动一个封装了服务端、客户端、热重载的复合进程。VS Code 默认的 "type": "node" 配置会试图直接运行 JS 文件,但 Meteor 入口根本不是 JS,而是命令行;"type": "chrome" 配置若没等服务就开浏览器,就会报 net::ERR_CONNECTION_REFUSED。
-
meteor run启动后才注入 source map,Chrome 必须等服务 ready 才能加载正确映射 - 服务端断点只对
imports/或server/下函数体内代码有效,main.js顶层语句基本停不住 -
webRoot写成"${workspaceFolder}/client"就找不到源码,断点变空心圆
必须写的三个 launch.json 配置项
你得明确拆成三块:Node 启动、Chrome 连接、顺序控制。少一个,全栈调试就断链。
-
"Meteor: Node":设"runtimeExecutable": "meteor"(确保系统 PATH 有),或改用"runtimeExecutable": "npm"+"runtimeArgs": ["start"],前提是package.json里有"start": "meteor run" -
"Meteor: Chrome":"url": "http://localhost:3000","webRoot": "${workspaceFolder}"(不能加斜杠,不能写子路径) -
"Meteor: All":"compounds"里必须是["Meteor: Node", "Meteor: Chrome"],顺序反了 Chrome 就连不上
调试前必须检查的硬性前提
就算 launch.json 一模一样,以下任一条件不满足,断点照样不触发。
- 项目必须含
.meteor/目录——用meteor create初始化的才行,纯npm init+ 手动装包的项目不支持原生调试 - 服务端断点只能打在函数内部,比如
imports/api/tasks.js里某个方法体里;模块顶层的console.log、if判断外代码、export行几乎无法命中 - 客户端断点要确认 Chrome DevTools 的 Sources 面板里文件路径带
webpack:///前缀,否则说明 source map 没对上
真正容易被忽略的是:Meteor 客户端代码在服务启动后才动态生成并注入,所以 Chrome 调试器必须严格依赖 compounds 的执行时序,而不是靠人工等几秒再点;另外,webRoot 多一个斜杠、少一个点,断点就静默失效——这种细节没有报错提示,只能靠反复核对路径。


















