VSCode Vue 调试
VSCode Vue 调试
如何在 VSCode 中设置断点,直接调试 Vue 代码?
以下所有运行环境的 node 版本:v16.15.1
以下操作和设置,在由 vue-cli 4 创建的 vue2/js 项目下进行,应该也适用于 vue-cli 4 下创建的其它类型项目,没有进一步尝试。
vue-cli 4 对应的 webpack 版本为 4.x
一些前置条件
VSCode 已经内置 JaveScript Debugger,不需要再安装 Debugger for Chome。
microsoft/vscode-js-debug: The VS Code JavaScript debugger
VSCode 需要配置 launch.json
Debugging in Visual Studio Code
在项目中,添加 launch.json 文件,可以选择多种调试器。
如果已经创建,则还可以添加配置。
这里是配置属性的含义说明:
Debugging in Visual Studio Code
launch.json 配置
需要添加 sourceMapPathOverrides
vscode-js-debug/ at ab0b7d74c66a87c2ab6918f7bb81a8fcc6166 · microsoft/vscode-js-debug
代码语言:javascript代码运行次数:0运行复制{ // 使用 IntelliSense 了解相关属性。 // 悬停以查看现有属性的描述。 // 欲了解更多信息,请访问: /?linkid=8087 "version": "0.2.0", "configurati": [ { "name": "Launch Chrome", "request": "launch", "type": "chrome", "url": "http://localhost:8080", "webRoot": "${workspaceFolder}/src", "sourceMapPathOverrides": { "webpack:///src/*": "${webRoot}/*" } } ]}
注意 webRoot 要设置正确,需要和 sourceMapPathOverrides 中的路径对应。
js 配置
webpack 相关 | Vue CLI
添加 js配置文件,添加 webpack 配置。
代码语言:javascript代码运行次数:0运行复制 = { configureWebpack: { devtool: 'source-map' }}
调试运行
在终端中使用 yarn serve
运行,然后在 vscode 启动调试,就可以命中断点了。
vue-cli 5 对应的 webpack 版本为 5.x,在 vue-cli 5 下创建的 vue 项目,不能通过类似上面比较简单的设置,就开启在 VSCode 中的断点调试支持。
以下的配置在 vue2/js,vue/js,vue/ts 下测试 OK,但操作有点复杂,不像是支持一个调试功能需要的设置,不然门槛有点太高了。如果知道其它简单的方式,求告知。
方案来源:Vue + TypeScript & Debuggers - ckh|Culting
准备工作
添加 source-map
包,被安装的版本为 “^0.7.4”。
Terminal window
代码语言:javascript代码运行次数:0运行复制yarn add source-map -D
launch.json 配置
代码语言:javascript代码运行次数:0运行复制{ // 使用 IntelliSense 了解相关属性。 // 悬停以查看现有属性的描述。 // 欲了解更多信息,请访问: /?linkid=8087 "version": "0.2.0", "configurati": [ { "name": "Launch Chrome", "request": "launch", "type": "chrome", "url": "http://localhost:8080", "webRoot": "${workspaceFolder}", "sourceMapPathOverrides": { "webpack://<name-from-package.json>/./src/*": "${webRoot}/src/*" }, } ]}
注意,上面的 <name-from-package.json>
需要替换为项目名称
js
代码语言:javascript代码运行次数:0运行复制ct { defineConfig } = require("@vue/cli-service");ct fs = require('fs');ct { SourceMapCumer, SourceMapGenerator } = require('source-map');
= defineConfig({ transpileDependencies: true, configureWebpack: { devtool : "source-map", plugins: [{ apply(compiler) { compiler.('Initializing Compilation', (compilation) => { compilation.hooks.('All Modules Built', async (modules) => { for (ct module of modules) { if (shouldSkipModule(module)) continue;
ct pathWithoutQuery = module.resource.replace(/\?.*$/, ''); ct sourceFile = fs.readFileSync(pathWithoutQuery).toString('utf-8'); ct sourceMap = extractSourceMap(module);
sourceMap.sources = [pathWithoutQuery]; sourceMap.sourcesContent = [sourceFile]; = await shiftMappings(sourceMap, sourceFile, pathWithoutQuery); } }); }); } }] }
});
function shouldSkipModule(module) { ct { resource = '' } = module;
if (!resource) return true; if (/node_modules/.test(resource)) return true; if (!/\.vue/.test(resource)) return true; if (!/type=script/.test(resource)) return true; if (!/lang=ts/.test(resource)) return true; if (isMissingSourceMap(module)) return true;
return false;}
function isMissingSourceMap(module) { return !extractSourceMap(module);}
function extractSourceMap(module) { if (!module['_source']) return null;
return module['_source']['_sourceMap'] || module['_source']['_sourceMapAsObject'] || null;}
async function shiftMappings(sourceMap, sourceFile, sourcePath) { ct indexOfScriptTag = getIndexOfScriptTag(sourceFile);
ct shiftedSourceMap = await SourceMapCumer.with(sourceMap, null, async (cumer) => { ct generator = new SourceMapGenerator();
((mapping) => { ct { generatedColumn, generatedLine, originalColumn, originalLine } = mapping;
let name = ; let source = sourcePath;
var original = null
if (originalLine === null || originalColumn === null) { name = null; source = null; } else { original = { column: originalColumn, line: originalLine + indexOfScriptTag, }; }
generator.addMapping({ generated: { column: generatedColumn, line: generatedLine, }, original, source, name }); });
return (); });
return ;}
function getIndexOfScriptTag(sourceFile) { ct lines = (/.+/g); let indexOfScriptTag = 0;
for (ct line of lines) { ++indexOfScriptTag; if (/<script/.test(line)) break; }
return indexOfScriptTag;}
以上代码还是来自 Vue + TypeScript & Debuggers - ckh|Culting, 源码见:vue-typescript-debugger/js at master · fearnycompknowhow/vue-typescript-debugger
需要注意的是,以上源码,做了一点小修复:添加了 var original = null
的定义,不然编译可能报错。
运行调试
通过 yarn serve
运行项目,在 VSCode 中启动调试,就可以命中断点了。
注意,launch.json
的配置的启动 url,需要随配置修改。
这里的 vite 版本是 2.9.1
npm info vite version
如果使用 vite 创建 vue 项目,不管是 vue2、vue,还是 js/ts,让 VSCode 支持调试,都非常简单。
开始 | Vite 官方中文文档
Terminal window
代码语言:javascript代码运行次数:0运行复制yarn create vite
launch.json
只要添加 "webRoot": "${workspaceFolder}/src"
就可以了
{ // 使用 IntelliSense 了解相关属性。 // 悬停以查看现有属性的描述。 // 欲了解更多信息,请访问: /?linkid=8087 "version": "0.2.0", "configurati": [ { "name": "Launch Chrome", "request": "launch", "type": "chrome", "url": "http://localhost:000", "webRoot": "${workspaceFolder}/src" } ]}
运行调试
然后直接运行,yarn dev
,接着就可以在 VSCode 中启动调试了。
在VS Code 中调试Vue.js - SegmentFault 思否
Vue + TypeScript & Debuggers - ckh|Culting
原文链接:
本作品采用 「署名 4.0 国际」 许可协议进行许可,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接。
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。 原始发表:2022年7月2日 |,如有侵权请联系 cloudcommunity@tencent 删除调试源码modulereturn配置#感谢您对电脑配置推荐网 - 最新i3 i5 i7组装电脑配置单推荐报价格的认可,转载请说明来源于"电脑配置推荐网 - 最新i3 i5 i7组装电脑配置单推荐报价格
上一篇:VSCode 基本前端调试
推荐阅读
留言与评论(共有 11 条评论) |
本站网友 奥登数据 | 17分钟前 发表 |
"http | |
本站网友 怎样布置教室 | 26分钟前 发表 |
microsoft/vscode-js-debug | |
本站网友 动物保健 | 11分钟前 发表 |
"type" | |
本站网友 重庆大众4s店 | 17分钟前 发表 |
如果知道其它简单的方式 | |
本站网友 小泽圆 | 25分钟前 发表 |
generatedColumn | |
本站网友 佛山季华园 | 20分钟前 发表 |
添加 webpack 配置 | |
本站网友 余额宝理财通收益对比 | 8分钟前 发表 |
"http | |
本站网友 上海建筑工程 | 20分钟前 发表 |
求告知 | |
本站网友 piaoxinhui | 10分钟前 发表 |
} ]}注意 | |
本站网友 网络服务列表 | 21分钟前 发表 |
"chrome" |