Cypress 本身启动过程的调试

这个文件:node_modules\cypress\bin\cypress

里面的内容:

#!/usr/bin/env node

require('../lib/cli').init()

Cypress 本身启动过程的调试_第1张图片

很多 require:
Cypress 本身启动过程的调试_第2张图片

找到 init 方法:
Cypress 本身启动过程的调试_第3张图片

我们执行的 yarn cypress:open, 执行的应该是这个 open.js 文件里的内容吧。

Cypress 本身启动过程的调试_第4张图片

验证一下就知道了。在 open.js 里添加一行打印语句。如果我们重新执行 cypress:open, 并且看到了这条打印语句,说明我们的猜想是正确的:
Cypress 本身启动过程的调试_第5张图片

果然,我们的猜想是正确的。

Cypress 本身启动过程的调试_第6张图片

下一个问题:如何调试 cypress:open 这个启动过程本身?

我们再回到 .bin 文件夹下的 cypress.cmd 文件,如何知道运行时我们执行的是图例1 还是图例2 的 if 分支呢?故意将 if 分支里的路径胡乱修改一下,然后执行,根据报错的消息即可判断。

Cypress 本身启动过程的调试_第7张图片

运行时,试图查找 cypress2,说明进入上图的 else 分支:
Cypress 本身启动过程的调试_第8张图片

那么我们就给这个分支加上 --inspect-brk 的 option:
Cypress 本身启动过程的调试_第9张图片

重新执行,现在应该就可以单步调试了:

Cypress 本身启动过程的调试_第10张图片

果然,现在停在了 require('../lib/cli').init() 这行语句,我们就可以单步调试 Cypress 了:
Cypress 本身启动过程的调试_第11张图片

开始单步调试,从 process.env 传递进来的命令行参数:open:

Cypress 本身启动过程的调试_第12张图片

创建一个新的 command 实例:
Cypress 本身启动过程的调试_第13张图片

这里加载 exec 文件夹下的 open.js 文件,执行对应的 module:

Cypress 本身启动过程的调试_第14张图片

在 open.js module 的 start 函数里设置断点:

Cypress 本身启动过程的调试_第15张图片

工作目录:
Cypress 本身启动过程的调试_第16张图片

这里引入一个问题,这个 debug module 如何打开调试模式?

Cypress 本身启动过程的调试_第17张图片

轻量级:
Cypress 本身启动过程的调试_第18张图片

Cypress 本身启动过程的调试_第19张图片

居然是这个 path:
Cypress 本身启动过程的调试_第20张图片

C:\Users\I042416\AppData\Local\Cypress\Cache\8.5.0\Cypress

这还有一个 exe 文件:足足有 130 MB:
Cypress 本身启动过程的调试_第21张图片

一个 windows 客户端:
Cypress 本身启动过程的调试_第22张图片

未完待续。

你可能感兴趣的:(Cypress 本身启动过程的调试)