要针对任何特定情况回答此问题,至少需要使用 launch.json 配置和源文件夹结构。就在上周,我有一个真实的故事来说明原因:
背景
我最近继承了一个比较小的Vue项目,马上遇到了同样的问题。 VSCode 中的断点在我所有的源文件中都是“跳跃的”。
该项目不是在 VSCode 中开发的,因此源代码管理中没有 launch.json。我对调试配置的第一次天真尝试如下所示:
{
"type": "chrome",
"request": "launch",
"name": "Launch Chrome",
"url": "http://localhost:8080",
"webRoot": "${workspaceRoot}",
"sourceMaps": true
}
一个非常重要的细节是源文件夹结构。它看起来像这样:
D:\TST\PROJECT
└───src
│ main.js
│
├───components
│ AnotherComponent.vue
│ SomeComponent.vue
│
└───services
myservice.js
yourservice.js
修复它
容易发现的问题是webRoot。由于我的源文件都在src 文件夹中,因此需要指向${workspaceRoot}/src,而不仅仅是${workspaceRoot}。这样做可以解决我在src/components 下的.vue 文件中的所有问题。不幸的是,main.js 和services 文件夹中的文件中的断点仍然不稳定。
下一步是将sourceMapPathOverrides 键添加到launch.json 配置中。 VSCode 自动完成我认为的默认值:
"sourceMapPathOverrides": {
"webpack:///./*": "${webRoot}/*",
"webpack:///src/*": "${webRoot}/*",
"webpack:///*": "*",
"webpack:///./~/*": "${webRoot}/node_modules/*",
"meteor://?app/*": "${webRoot}/*"
}
我将这些保留原样,并添加了两个条目。为了修复main.js,我添加了:
"webpack:///./src/*": "${webRoot}/*",
并修复我添加的服务文件夹中的文件:
"webpack:///./src/services/*": "${webRoot}/services/*",
此时,我的所有断点都在整个项目的所有文件中表现。
但是为什么呢?
很遗憾,我无法告诉您为什么在我的案例中需要这两条魔法线,甚至无法告诉您它们的真正作用。
不过,我可以告诉你我是如何猜到它们的。在 Chrome 的 devtools 中,我深入了解了“Sources”选项卡的 webpack:// 部分。我注意到src/components 显示在“根”中,(绿色箭头),而我的其他来源(红色箭头)没有。它们只在.(红色圆圈)下显示。
免责声明:我不是 Vue、webpack、chrome 调试协议、sourcemaps 或 vue-loader 方面的专家。我只是另外一位想要在他的 IDE 中设置断点的开发人员,而不是在他的浏览器中。