使用vscode以及chrome调试yarn源码

2 调试指南

本文发布于掘金专栏
文章原文位于github

在上一章中已经打包出带有sourcemap的yarn产物,本章将初步进行调试环境的配置

使用vscode进行调试

新建一个文件夹作为调试文件夹,也就是真正运行yarn命令的地方。在yarn的源码文件夹新建vscodelaunch.json。选择node -> launch,将其中的cwd选项设置为新建的调试文件夹的路径。

完整的配置文件如下

json 复制代码
{
  "version": "0.2.0",
  "configurations": [
    {
      "type": "node",
      "request": "launch",
      "name": "test yarn version",  // 这里只写了最简单的yarn --version命令的调试
      "skipFiles": ["<node_internals>/**"],
      "console": "internalConsole",
      "outFiles": [
        "${workspaceFolder}/**/*.(m|c|)js",
        "!**/node_modules/**"
      ],
      "program": "${workspaceFolder}/mybuild/cli/index.js",
      "cwd": "${workspaceFolder}/../yarn-source-dev",  // 这个设置为新建的调试文件夹的路径,相对路径绝对路径都可以
      "args": [
        "--version"
      ]
    }
  ]
}

断点到src/cli/index.js里面进行调试,发现能命中断点

在接下来的调试里面通过增加launch.json里面configurations的来调试每个命令,只需把例子中的args修改成想调试的命令即可。

node火焰图

生成node火焰图

生成nodejs的运行火焰图可以很明显的看到运行的堆栈以及调用的顺序。

在调试文件夹里面增加默认的包然后删除node_modules

bash 复制代码
yarn init -y

yarn add react@18   # 这里一定使用18,因为18有依赖更好分析install的过程

rm -rf node_modules

找到打包出的入口js文件位置,相对与yarn源码文件夹的路径为./mybuild/cli/index.js,复制绝对路径。运行下面的代码,会在调试文件夹里面生成一个cpuprofile文件,这就是火焰图的文件,这个文件可以用浏览器的调试工具打开。

bash 复制代码
node --cpu-prof --cpu-prof-interval=1 /yarn-dev/yarn/lib/cli/index.js install

运行后生成的cpuprofile文件

查看火焰图

进入浏览器chrome://inspect/Open dedicated DevTools for Node

选中performance以及上传文件按钮

在文件选择里面选择刚才生成的cpuprofile文件,可以看到完整的调用栈信息的展示。

作者这里使用的是wsl,所以底下的文件没有映射到源代码里面,源代码的文件夹应该是src,这里因为使用了wsl导致sourcemap映射出了问题还是显示的打包后的文件夹mybuild。实际上使用windows或者linux mac都可以成功映射到源代码里面。这里关系并不大因为源码和打包后的代码里面的函数名基本没有改变所以也能看。

总结

本章介绍了使用vscodeyarn的源码进行调试,以及使用chrome的调试工具对yarn命令生成的火焰图进行分析。在接下来的调试里面会使用这两个方法进行分析调试。vscode的调试主要使用断点进行调试,方便观察每一步的变量以及逻辑,而火焰图则方便观察命令整体的运行步骤以及运行规律。

author: xiaochuan

date: 2024.12.26

相关推荐
几度泥的菜花6 分钟前
使用jQuery实现动态下划线效果的导航栏
前端·javascript·jquery
思茂信息20 分钟前
CST直角反射器 --- 距离多普勒(RD图), 毫米波汽车雷达ADAS
前端·人工智能·5g·汽车·无人机·软件工程
星星不打輰25 分钟前
Vue入门常见指令
前端·javascript·vue.js
好_快1 小时前
Lodash源码阅读-isNative
前端·javascript·源码阅读
好_快1 小时前
Lodash源码阅读-reIsNative
前端·javascript·源码阅读
好_快1 小时前
Lodash源码阅读-baseIsNative
前端·javascript·源码阅读
好_快1 小时前
Lodash源码阅读-toSource
前端·javascript·源码阅读
Oneforlove_twoforjob1 小时前
volta node npm yarn下载安装
前端·npm·node.js
咖啡の猫1 小时前
npm与包
前端·npm·node.js
徐福记c1 小时前
npm install -g @vue/cli 方式已经无法创建VUE3项目
前端·vue.js·npm