vue3 开启本地调试

前言

最近在进行 vue3 源码的学习,将掘金作为学习笔记,记录一下学习的过程以及自己的理解,从0开始搭建 mini-vue。

vue 如何开启本地调试

下载 vue 源码

github 官网进行下载,可以通过 git 下载,也可以直接通过 download zip 进行下载,内容是一样的

创建测试html

下载完vue项目之后,我们现在本地进行打包,通过:

shelll 复制代码
pnpm i

安装依赖,然后通过

shell 复制代码
npm run build

进行打包,之后我们就能够在项目的 /packages/vue/dist 中找到打包文件,然后我们通过创建一个简单的html文件来引入这个打包文件,并且尝试着使用 reactive。

html 复制代码
<!DOCTYPE html>
<html lang="en">

<head>
   <meta charset="UTF-8">
   <meta http-equiv="X-UA-Compatible" content="IE=edge">
   <meta name="viewport" content="width=device-width, initial-scale=1.0">
   <title>Document</title>
   <script src="../../dist/vue.global.js"></script>
</head>

<body>
   <div id="app"></div>
</body>
<script>
   const { reactive } = Vue

   const obj = reactive({
       name: '张三'
   })
</script>
</html>

但是因为我们引入的是vue的打包文件,所以这里哪怕通过断点也看不到任何源码中的内容,所以我们要来开启 SourceMap 方便我们之后的断点调试。

开启 SourceMap

在 vue 的打包命令中,我们会发现,其实打包就是执行 script 底下的 build 文件,那么我们在 build 文件当中能够找到这一段代码

js 复制代码
await execa(
    'rollup',
    [
      '-c',
      '--environment',
      [
        `COMMIT:${commit}`,
        `NODE_ENV:${env}`,
        `TARGET:${target}`,
        formats ? `FORMATS:${formats}` : ``,
        buildTypes ? `TYPES:true` : ``,
        prodOnly ? `PROD_ONLY:true` : ``,
        sourceMap ? `SOURCE_MAP:true` : ``
      ]
        .filter(Boolean)
        .join(',')
    ],
    { stdio: 'inherit' }
  )

根据 sourceMap 我们能够找到设置这个变量的位置:

js 复制代码
const args = require('minimist')(process.argv.slice(2))
console.log("🚀 ~ file: build.js:26 ~ args:", args)
...
const sourceMap = args.sourcemap || args.s

minimist 是一个 解析参数选项 的第三方库,用于解析命令行命令后面携带的额外参数

然后我们尝试着在打包命令中增加参数,并且重新打包

shell 复制代码
node scripts/build.js -s
🚀 ~ file: build.js:26 ~ args: { _: [], s: true }

这时候我们就可以看见控制台输出的参数,其中 s 变成了 true ,那么我们也就找到了开启 SoucreMap 的位置,然后就可以通过修改 packjson 中的打包命令,来开启 SoucreMap

shell 复制代码
 "build": "node scripts/build.js -s",

然后我们重新打包,回到最开始的测试文件当中

找到 reactive 文件,在其中我们就能够找到 reactive 这个函数,在其中打一个断点,然后刷新浏览器。

这样我们就成功开启了源码中的断点

总结

本文作为 vue 源码学习的第一篇,主要是记录一下 vue3 源码开启调试的方法。

相关推荐
程序员黑豆13 小时前
Java入门第一步:从零开始编写你的第一个Hello World程序
java·前端·ai编程
凌涘13 小时前
前端路由(二):React Router 组件化路由实战
前端
鸽鸽13 小时前
别急着装第三方库,这些事浏览器原生就能做到——Web Native API 实战指南
前端
做前端的娜娜子13 小时前
从 0 到 1 打造一个配置可视化后台:一次前端配置中心化改造的实战复盘
前端·设计模式·数据可视化
南雨北斗14 小时前
vue3 RouterLink链接颜色修改的方法
前端
Richard.Wong14 小时前
Windows IIS 服务器部署 Vue3 前端项目详细流程
服务器·前端·windows
数据知道14 小时前
XSS 攻防全解:反射型、存储型、DOM 型实战演示
前端·安全·web安全·网络安全·xss
Nemo_XP14 小时前
C# gridlookupedit选中内容重复还原操作
服务器·前端·c#
大家的林语冰14 小时前
🎉 Vercel 官宣 Next 16.3 正式发布,GitHub 第一全栈框架再次进化!
前端·javascript·前端框架
不爱说话郭德纲15 小时前
我只给了 TRAE Work 一张差评截图,它最后却把自己的 P0 结论推翻了?
前端·后端·架构