debugging Vite Dev Server源Map不起作用或指向VScode调试器中的错误行/文件

ykejflvf  于 2023-08-06  发布在  Vscode
关注(0)|答案(1)|浏览(287)

bounty还有5天到期。回答此问题可获得+100声望奖励。jps_dot_dev希望引起更多关注这个问题:我花了几个月的时间试图纠正这个问题,这对我自己的开发产生了重大影响,我觉得相关的Github问题没有得到足够的关注,也没有提供有效的解决方案。

我正在使用WSL 2和/或Fedora 38与VScode和一个以前的CRA项目,我已经转换为Vite。自从迁移到Vite以来,我一直无法让VScode调试器在Chrome和Firefox中正常工作,因为每个浏览器的行为都不一样。我见过的最相关的行为是:

  • 当调试器处于活动状态时,VScode有时无法绑定断点(Chrome)。
  • 当调试器处于活动状态时放置断点时,VSCode会减慢到完全停止(Chrome)。
  • VScode或浏览器指向已转换的文件,而不是源Map指向的本地文件。(Chrome/FF)
  • Vite报告堆栈跟踪中不正确的行号(Chrome/FF)。
  • 断点根本不会触发(Chrome/FF)。

我已经在launch.json和Vite.config.js中尝试了WSL 2和Fedora 38中的无数选项。我的当前配置:

launch.json

{
  // Use IntelliSense to learn about possible attributes.
  // Hover to view descriptions of existing attributes.
  // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
  "version": "0.2.0",
  "configurations": [
    {
      "name": "Launch Chrome",
      "request": "launch",
      "type": "chrome",
      "url": "http://localhost:3000",
      "trace": true,
      "sourceMaps": true,
      "perScriptSourcemaps": "yes",
      "webRoot": "${workspaceFolder}"
    },
    {
      "name": "Firefox Debug",
      "type": "firefox",
      "request": "launch",
      "url": "http://localhost:3000",
      "webRoot": "${workspaceFolder}/src",
      "skipFiles": [
        "**/node_modules/**"
      ],
      "pathMappings": [
        {
          "url": "http://localhost:3000",
          "path": "${workspaceFolder}"
        }
      ]
    }
  ]
}

字符串

vite.config.js

import { defineConfig, loadEnv } from 'vite';
import react from '@vitejs/plugin-react';
import { sentryVitePlugin } from "@sentry/vite-plugin";
import { VitePWA } from 'vite-plugin-pwa';
import copy from 'rollup-plugin-copy'
import path from "path";

//import viteTsconfigPaths from 'vite-tsconfig-paths';

export default defineConfig(({ mode }) => {
  //import svgrPlugin from 'vite-plugin-svgr';
  process.env = { ...process.env, ...loadEnv(mode, process.cwd(), '')};
  
  return {
    build: {
      outDir: 'build',
      sourcemap: true
    },
    plugins: [react(), VitePWA({
      injectRegister: null,
      strategies: 'injectManifest',
      filename: 'service-worker.js',
      srcDir: 'src',
      devOptions: {
        enabled: true,
        type: "module",
      },
      injectManifest: {
        maximumFileSizeToCacheInBytes: 20 * 1024 * 1024,
      }
    })],
    resolve: {
      alias: {
        src: path.resolve(__dirname, "./src"),
      },
    },
    preview: {
      port: 3000
    },

    server: {
      port: 3000,
      host: "0.0.0.0"
    }
  };
});


我打开的相关GH问题:https://github.com/microsoft/vscode-js-debug/issues/1739#issuecomment-1629913799

k75qkfdt

k75qkfdt1#

方案一

问题是VSCode调试器的默认配置不能很好地与Vite一起工作。调试器希望源文件与转换后的文件位于同一目录中,但Vite默认情况下不会这样做。
要解决这个问题,需要在launch.json文件中添加以下行:

"pathMappings": [
  {
    "url": "http://localhost:3000",
    "path": "${workspaceFolder}"
  }
]

字符串
这将告诉调试器在与转换文件相同的目录中查找源文件。
一旦您完成了这一更改,您应该能够毫无问题地调试Vite项目。
以下是launch.json文件的更新版本:

{
  // Use IntelliSense to learn about possible attributes.
  // Hover to view descriptions of existing attributes.
  // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
  "version": "0.2.0",
  "configurations": [
    {
      "name": "Launch Chrome",
      "request": "launch",
      "type": "chrome",
      "url": "http://localhost:3000",
      "trace": true,
      "sourceMaps": true,
      "perScriptSourcemaps": "yes",
      "webRoot": "${workspaceFolder}",
      "pathMappings": [
        {
          "url": "http://localhost:3000",
          "path": "${workspaceFolder}"
        }
      ]
    },
    {
      "name": "Firefox Debug",
      "type": "firefox",
      "request": "launch",
      "url": "http://localhost:3000",
      "webRoot": "${workspaceFolder}/src",
      "skipFiles": [
        "**/node_modules/**"
      ],
      "pathMappings": [
        {
          "url": "http://localhost:3000",
          "path": "${workspaceFolder}"
        }
      ]
    }
  ]
}

方案二

在Vite中使用正确的源Map和断点进行调试有时会很有挑战性,特别是在使用特定设置(如WSL2或非标准配置)时。要改善调试体验,可以尝试以下步骤:
确保您拥有最新版本的Vite和其他相关依赖项,因为较新的更新可能包括源Map和调试问题的修复。
修改launch.json文件:

For Chrome:

{
  "version": "0.2.0",
  "configurations": [
    {
      "name": "Launch Chrome",
      "request": "launch",
      "type": "pwa-chrome",
      "url": "http://localhost:3000",
      "webRoot": "${workspaceFolder}",
      "sourceMapPathOverrides": {
        "webpack:///src/*": "${webRoot}/*"
      }
    }
  ]
}


对于Firefox

{
      "version": "0.2.0",
      "configurations": [
        {
          "name": "Launch Firefox",
          "type": "firefox",
          "request": "launch",
          "url": "http://localhost:3000",
          "webRoot": "${workspaceFolder}",
          "pathMappings": [
            {
              "url": "webpack:///*",
              "path": "${webRoot}/*"
            }
          ]
        }
      ]
    }


确保您已经正确配置了Vite插件vite-plugin-sentry,以包含Sentry的源Map。这也可能有助于解决源Map问题。
检查VSCode启动配置和Vite的开发服务器配置之间是否存在重叠设置或冲突。
验证您的Vite构建配置是否生成了正确的源Map:

export default {
  // Other configurations...
  build: {
    sourcemap: true,
    // Other build options...
  },
};

相关问题