【问题标题】:Cannot set breakpoint in .vue file with async method无法使用异步方法在 .vue 文件中设置断点
【发布时间】:2020-05-05 03:57:33
【问题描述】:

我在调试 Vue 应用程序时遇到问题,因为步进可以跳过行或无法在有效行上设置断点。

我猜这是源地图问题,但不确定从哪里开始挖掘。可能是 Vue-loader、Webpack 或 Babel 之一。

测试:

vue: 2.6.10

vue-cli 4.1.2

问题可以重现如下:

创建新的 Vue 项目:

vue 创建测试

只使用默认值

cd 测试

npm 运行服务

将 HelloWorld.vue 替换为:

<template>
  <button @click="save()">
    Save
  </button>

</template>

<script>
export default {

  methods: {

    async save() {
      debugger;
      let valid = false;
      if (valid) {
        return;
      } else {
        console.log("Hi")
      }
    }
  }
}
</script>

在 Chrome 中打开 devtools,点击保存按钮并尝试在行上放置断点:

if (valid) {

在我的测试中没有设置断点。

如果我从 save 方法中删除 async,就可以设置断点了。

使用 Chrome 79 和 Firefox 73 测试。

我也尝试过 vue.config.js 中的各种 devtool 设置,但没有成功,例如:

devtool = 'cheap-module-eval-sourcemap' 
devtool = 'cheap-eval-source-map' 
devtool = 'source-map'

有什么想法吗?

亲切的问候

鲍勃

【问题讨论】:

  • 我也有同样的问题;无法在异步方法中调试。很想听听对此的任何修复!

标签: vue.js vuejs2


【解决方案1】:

不知道为什么它在这种特定情况下不起作用,但作为最后的手段,您可以在 if... 之前添加一行 debugger; - 这将使任何 DevTools(至少任何当前的,包括。 IE11)停在那里。您的代码将如下所示:

      // ...
      debugger;
      if (valid) {
        // ...

【讨论】:

  • 是的,这就是我正在使用的方法。但是应用程序正在增长,我需要流畅的调试体验,尤其是“Step”。目前步进在我的应用程序中不是很有用。过去一年(2019 年)在 Vue 和 Webpack 中进行了一些修复,以使步进更准确。但似乎一些小鬼可能仍然存在;-)
【解决方案2】:

这可能是因为 Babel polyfills Vue CLI 被配置为默认使用生成的源映射似乎不能很好地使用。

具体来说,这个用于异步方法的 polyfill 会导致调试问题: https://babeljs.io/docs/en/babel-plugin-transform-async-to-generator

你可以通过在你的 .browserslistrc 中添加这些来避免这些 polyfills

[development]
last 1 chrome version
last 1 firefox version

@vue/babel-preset-app Babel 预设会根据您在 .browserslistrc 中定位的浏览器自动确定要使用的 polyfill。因此,为了禁用有问题的 polyfill,我们只针对开发中原生支持 async/await 的浏览器(例如:最新版本的 Chrome 和 Firefox)。

【讨论】:

  • 这对我不起作用,检查了当前的 Chrome、FF 和 Edge,并确保 babel 没有创建异步生成器。断点仍然只正确注册,直到代码第一次进入异步方法,之后点断点似乎映射到随机不相关的代码。
  • @npjohns 随机不相关的代码可能是 polyfill。尝试搜索一些函数名称以找出它是哪个 polyfill,然后找到一种方法阻止该 polyfill 在开发中使用。
猜你喜欢
  • 2015-04-14
  • 2022-01-24
  • 1970-01-01
  • 2014-09-22
  • 2010-10-14
  • 1970-01-01
  • 2020-05-30
  • 2013-10-01
相关资源
最近更新 更多