Electron-vue开发实战(四)| VSCODE调试主进程
package.json查看配置⁍
事实上,因为安装的时候什么都选了,所以在package.json里有dev的配置
可以先点击调试按钮,选择Run Script:dev
但是一开始我没调出来(可能是要先添加source-map
?),先用[1]的方法配置lauch.json
折腾了一番
后来发现根本不需要配?【知识增加.jpg】
source-map⁍
参考的文章中还写了要在webpack.main.config.js
里添加
1 |
|
我照做了,不然好像打不了断点
什么是source-map⁍
source-map也是一种针对JavaScript的debug工具[2]
为什么用source-map⁍
JavaScript 脚本正变得越来越复杂。大部分源码(尤其是各种函数库和框架)都要经过转换,才能投入生产环境。
常见的源码转换,主要是以下三种情况:
- 压缩,减小体积
- 多个文件合并,减少 HTTP 请求数
- 其他语言编译成 JavaScript
这三种情况,都使得实际运行的代码不同于开发代码,除错( debug
)变得困难重重,所以才需要 Source Map
。结合上面的例子,即使打包过后的代码,也可以找到具体的报错位置,这使得我们 debug
代码变得轻松简单,这就是 Source Map
想要解决的问题。
如何生成 Source Map⁍
各种主流前端任务管理工具,打包工具都支持生成 Source Map
。[2:1] 中提到了各种各样的包,包括了安装环境时常见的gulp
。
Webpack
是前端打包工具(本文案例都会使用该打包工具)。在其配置文件 webpack.config.js
中设置**devtool[13]**即可生成 Source Map
文件:
1 |
|
- devtool有 20 多种不同取值,分别生成不同类型的
Source Map
,可以根据需要进行配置。下文会详细介绍,这里不再赘述。
(这就是为什么要在webpack.main.config.js
添加它的原因)
source-map大致原理⁍
打开了souce-map
后调试,会在dist/electron
底下生成.map
文件
执行打包后,生成 dist/electron
文件夹,打开 dist/main.js
正是因为这句注释,标记了该文件的 Source Map
地址,浏览器才可以正确的找到源代码的位置。sourceMappingURL
指向 Source Map
文件的 URL
。
main.js.map
里 mappings
属性的值是:AAAA; AACA, c
,它的组成结构分成三层:
第一层是行对应,以分号(;)分隔,分号间的内容对应一行线上代码。例如我们上面的例子里,没有分号(可以认为是省略了末尾的分号),则是因为线上代码被压缩成了一行。
第二层是位置对应,以逗号(,)分隔,逗号间的内容对应该行线上代码的某个位置。
第三层是位置映射,以VLQ编码表示,代表该位置对应的源代码位置。
通过进一步的解析,AAAA
和 AAcA
以及 c
都是代表了位置,正常来说,每个位置最多由 5 个字母组成,5 个字母的含义分别是:
- 第一位,表示这个位置在(转换后的代码的)的第几列。
- 第二位,表示这个位置属于 sources 属性中的哪一个文件。
- 第三位,表示这个位置属于转换前代码的第几行。
- 第四位,表示这个位置属于转换前代码的第几列。
- 第五位,表示这个位置属于 names 属性中的哪一个变量。
具体分析可以看参考文件[2:2]
总结⁍
总之,可以知道source-map
通过形成生成的JS代码对于源文件之间的映射,让我们可以对应到每一行、每一个变量,进行断点调试。