1.2 调试
调试准备
调试源码需要用到chrome devtools的断点以及performance record
确定vue3的具体版本
在开始之前我们需要确定使用的vue3的版本,这里的版本指的是小版本,很重要,会和后面的sourcemap一一对应。我这里选择的是3.3.4。将上文中clone到本地的源码reset到对应的版本
git reset --hard v3.3.4本项目使用的vue版本为
3.3.4
打包出带有sourcemap的版本
vue3的源码使用rollup打包,根据rollup的配置直接使用以下命令打包
pnpm build -s打包出的代码位于packages/vue/dist文件夹下,带有sourcemap文件

这里为了方便使用已经上传了cdn
引入
引入有两种方式
webpack externals
使用webpack external掉vue然后再通过全局引入Vue变量,这里全局引入的Vue是我们之前打包好的带有sourcemap的。这里引入的是production的打包,所以调试的时候不能使用serve命令,需要先把production模式下的产物输出在通过serve dist进行调试,这样可以省略到很多在production模式下不需要的代码比如hmr。当然如果想在development模式下调试的话可以引入develeopment模式下的Vue。
后续引入的vue都是production模式下的。
全局vue文件位于 https://cdn.jsdelivr.net/npm/xiaochuan-vue3-source@0.0.5/dist/3.3.4/vue.global.prod.js
使用@vue/cli创建的项目可以直接修改webpack的配置
运行下面命令就能断点到源码里面了
在浏览器里面我们把断点打到main.js的createApp那行,断点生效后点击step into(图1左下角)跳进函数声明,可以看到图2以及正确跳进了vue3的源码的createApp函数声明里面


webpack external方式的源码位于examples/demo-webpack
vite externals
vite使用esm,打包出的文件也有esm的版本。由于在production模式下vite使用的是rollup,修改rollup的externals配置在通过importmap引入打包好后的esm vue。
esm模块的vue文件位于https://cdn.jsdelivr.net/npm/xiaochuan-vue3-source@0.0.5/dist/3.3.4/vue.esm-browser.prod.js
运行下面命令
断点的步骤和webpack方式externals一样


可以看到表现和webpack方式引入的vue一样
vite引入方式的demo代码位于examples/demo-vite
总结
通过打包出带有sourcemap的vue产物再通过externals的方式引入就可以在源码里面进行断点了。这里两种方式引入表现都是一样的。
后续的demo都以
webpack方式引入
最后更新于