你可能从未使用过的调试 Vue3 (开源项目) 源码的方式

这篇具有很好参考价值的文章主要介绍了你可能从未使用过的调试 Vue3 (开源项目) 源码的方式。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

    1. 前言

大家好,我是若川。我倾力持续组织了一年多源码共读,感兴趣的可以加我微信 lxchuan12 参与。另外,想学源码,极力推荐关注我写的专栏《学习源码整体架构系列》,目前是掘金关注人数(4.7k+人)第一的专栏,写有20余篇源码文章。

2. 看开源项目学习是怎样的步骤?

看一个开源仓库,第一步一般是看 README.mdcontributing.md 贡献指南文档。

README.md 中一般有提到贡献指南文档的链接的。贡献指南文档就是为了让别人参与项目贡献。

而贡献指南写了很多关于参与项目开发的信息。比如怎么跑起来,项目目录结构是怎样的。怎么投入开发,需要哪些知识储备等。

第二步的克隆下来。按照贡献指南文档,把项目跑起来。

3. 如何调试 vue3 源码

我们这次来学调试 vue3 源码,看 vue3 源码[1]仓库 contributing.md[2]

contributing.md 部分内容

Development Setup

You will need Node.js[3]version 16+, and PNPM[4]version 7+.

We also recommend installing ni[5] to help switching between repos using different package managers. ni also provides the handy nr command which running npm scripts easier.

After cloning the repo, run:

$ pnpm i # install the dependencies of the project

关于上方提到的 ni,我曾经写过源码文章,可供参考。

尤雨溪推荐神器 ni ,能替代 npm/yarn/pnpm ?简单好用!源码揭秘!

从贡献指南中,我们可以得知一些信息,那么先来克隆项目安装依赖。

git clone https://github.com/vuejs/core.git
cd core
# 安装依赖
pnpm i

4. 使用 vitest vscode 扩展的调试方式

安装vitest vscode 扩展链接[6]、vitest vscode 扩展 github[7]

安装vitest-runner vscode 扩展链接[8]、vitest-runner vscode 扩展 github[9]

调试vue3源码,vue.js,vscode,前端,javascript,ecmascript
vitest-vscode 安装
调试vue3源码,vue.js,vscode,前端,javascript,ecmascript
debugger.png
调试vue3源码,vue.js,vscode,前端,javascript,ecmascript
debugger-test.png
// packages/vue/__tests__/index.spec.ts
import { vi } from 'vitest'
import { EMPTY_ARR } from '@vue/shared'
import { createApp, ref, nextTick, reactive } from '../src'

describe('compiler + runtime integration', () => {
  it('should support runtime template compilation', () => {
    const container = document.createElement('div')
    const App = {
      template: `{{ count }}`,
      data() {
        return {
          count: 0
        }
      }
    }
 // 可以按住 alt + 鼠标左键点击 跳转到函数,提前断点好想断点的地方
    createApp(App).mount(container)
    expect(container.innerHTML).toBe(`0`)
  })
  // 省略若干代码
}

如下图 gif 图所示,就是调试 vue 源码了。

调试vue3源码,vue.js,vscode,前端,javascript,ecmascript

gif 图调试源码

关于 gif 图中顶部各个按钮的作用,我曾经写过一篇文章新手向:前端程序员必学基本技能——调试JS代码

通过开源项目的测试用例调试源码,它的优点在于不用打包、更接近源码,测试覆盖率高的开源项目,可以只针对某项功能做针对性调试,看测试用例的过程中也能直接学会使用。而这种调试方式,可能是大部分人从未使用过的调试源码方式,因为大多数人可能没学过测试框架。

Vue 源码的测试用例现在改成了 Vitest[10]

同理可得,如果开源项目是使用 Jest 测试框架,可以安装 `Jest`[11]、`Jest Runner`[12]vscode 插件。

5. 通过生成 sourcemap 调试

5.1 如何生成 sourcemap

贡献指南的文档 contributing.md[13] 中有写:

Build with Source Maps

Use the --sourcemap or -s flag to build with source maps. Note this will make the build much slower.

pnpm run build -s

执行后,所有的都生成了 sourcemap 文件,如下图所示。

调试vue3源码,vue.js,vscode,前端,javascript,ecmascript
vue sourcemap

通过 sourcemap 文件,可以找到原始文件信息。

我们可以在根目录下的 package.json 中,看到有一个启动服务的命令。

{
  "private": true,
  "version": "3.3.0-alpha.4",
  "packageManager": "pnpm@7.26.0",
  "type": "module",
  "scripts": {
    "serve": "serve",
  },
}

这时再在命令行终端,执行这条命令,启动服务。

pnpm run serve
调试vue3源码,vue.js,vscode,前端,javascript,ecmascript
serve.png

浏览器打开 http://localhost:5000 可以找到相应路径。

比如我们打开这个源码中有的 todomvc 例子,来调试。http://localhost:64085/packages/vue/examples/composition/todomvc

// packages/vue/examples/composition/todomvc.html
<script src="../../dist/vue.global.js"></script>
<script>
const { createApp, reactive, computed, watchEffect, onMounted, onUnmounted } = Vue
// 省略若干代码
// 我们可以在这里断点调试
createApp({
  setup () {
    // 省略若干代码
}).mount('#app')

文件开头首先引入了文件vue.global.js,其底部注释表明了 sourcemap 文件 URL

// ../../dist/vue.global.js
var Vue = (function (exports) {})({});
//# sourceMappingURL=vue.global.js.map

我们可以在 createApp 函数处断点调试,createApp 函数里再断点调试,就是调试原来本身的源码。也和上文提到的vitest vscode 插件 一样调试。

调试vue3源码,vue.js,vscode,前端,javascript,ecmascript
chrome-debugger

调试如下图 gif 图所示。

调试vue3源码,vue.js,vscode,前端,javascript,ecmascript

chrome-debugger-gif.gif

至此,我们就也学会了根据项目中提供的命令通过生成 sourcemap 文件和调试源码。

5.2 为何贡献指南中写的方式就能生成 sourcemap ?

有小伙伴可能会好奇,为啥贡献指南,pnpm run build 编译加参数 --sourcemap 或者 -s 就能生成 sourcemap 呢。我们接下来探究下为啥 --sourcemap 或者 -s 就能生成 sourcemap 呢。

查看项目根目录下的 package.json 的文件,我们可以得知:build 命令,实际执行的是node scripts/build.js

{
  "private": true,
  "version": "3.3.0-alpha.4",
  "packageManager": "pnpm@7.26.0",
  "type": "module",
  "scripts": {
    "dev": "node scripts/dev.js",
    "build": "node scripts/build.js",
  },
}

找到这个文件 scripts/build.js

// scripts/build.js
import minimist from 'minimist'
import execa from 'execa'

const args = minimist(process.argv.slice(2))

const sourceMap = args.sourcemap || args.s

async function build(target) {
  //   省略若干代码
  const env =
    (pkg.buildOptions && pkg.buildOptions.env) ||
    (devOnly ? 'development' : 'production')
  await execa(
    'rollup',
    [
      '-c',
      '--environment',
      [
        `COMMIT:${commit}`,
        `NODE_ENV:${env}`,
        `TARGET:${target}`,
        formats ? `FORMATS:${formats}` : ``,
        prodOnly ? `PROD_ONLY:true` : ``,
        sourceMap ? `SOURCE_MAP:true` : ``
      ]
        .filter(Boolean)
        .join(',')
    ],
    { stdio: 'inherit' }
  )
}

minimist[14] 是解析命令行参数。execa[15] 是子进程执行命令。

相当于在命令行终端执行rollup[16] 打包:rollup -c --environment COMMIT:650f5c2,NODE_ENV:production,TARGET:compiler-ssr,SOURCE_MAP:true

看到这里,我们得知原来参数 --sourcemap 或者 -s 控制的是 rollupSOURCE_MAP:true 参数,从而控制是否生成 sourcemap 文件。

6. 总结

行文至此,我们来总结下。

看开源项目一定要先看官方的 README.md 和贡献指南 contributing.md

这是开源项目维护者为广大想参与贡献的开发者写的。

我们通过学会了安装 vitest vscode 扩展[17]、vitest-runner vscode 扩展 github[18],根据测试用例,指定相应的测试用例调试相应的源码。

测试用例非常重要。而且 vitest[19] 是中文文档,相对容易学习,非常值得我们学习。

另外,我们学会了如何生成 sourcemap,通过项目提供的例子,调试 Vue3 的源码。同时,还探究了为何能够编译时传参就能控制是否编译生成 sourcemap 文件,本质是利用命令行参数,最终控制 rollup 打包工具的 SOURCE_MAP:true 参数。

这篇文章整体比较简单,主要在于是否知道这两种调试源码的方式。如果把看源码比作登山,那么学会调试可以说是找到山的入口和爬山的方式。真正爬山,才是更难的时候。

如果看完有收获,欢迎点赞、评论、分享支持。你的支持和肯定,是我写作的动力

参考资料

[1]

vue3 源码: https://github.com/vuejs/core.git

[2]

contributing.md: https://github.com/vuejs/core/blob/main/.github/contributing.md

[3]

Node.js: https://nodejs.org

[4]

PNPM: https://pnpm.io

[5]

ni: https://github.com/antfu/ni

[6]

vitest vscode 扩展链接: https://marketplace.visualstudio.com/items?itemName=ZixuanChen.vitest-explorer

[7]

vitest vscode 扩展 github: https://github.com/vitest-dev/vscode

[8]

vitest-runner vscode 扩展链接: https://marketplace.visualstudio.com/items?itemName=kingwl.vscode-vitest-runner

[9]

vitest-runner vscode 扩展 github: https://github.com/kwai-explore/vscode-vitest-runner

[10]

Vitest: https://cn.vitest.dev/guide/

[11]

Jest: https://marketplace.visualstudio.com/items?itemName=Orta.vscode-jest

[12]

Jest Runner: https://marketplace.visualstudio.com/items?itemName=firsttris.vscode-jest-runner

[13]

贡献指南的文档 contributing.md: https://github.com/vuejs/core/blob/main/.github/contributing.md

[14]

minimist: https://github.com/minimistjs/minimist

[15]

execa: https://github.com/sindresorhus/execa

[16]

rollup: https://rollupjs.org/guide/en

[17]

vitest vscode 扩展: https://marketplace.visualstudio.com/items?itemName=ZixuanChen.vitest-explorer

[18]

vitest-runner vscode 扩展 github: https://github.com/kwai-explore/vscode-vitest-runner

[19]

vitest: https://cn.vitest.dev/guide/

调试vue3源码,vue.js,vscode,前端,javascript,ecmascript

················· 若川简介 ·················

你好,我是若川,毕业于江西高校。现在是一名前端开发“工程师”。写有《学习源码整体架构系列》20余篇,在知乎、掘金收获超百万阅读。
从2014年起,每年都会写一篇年度总结,已经坚持写了8年,点击查看年度总结。
同时,持续组织了一年多源码共读活动,帮助5000+前端人学会看源码。公众号愿景:帮助5年内前端人走向前列。

扫码加我微信 lxchuan12、拉你进源码共读

今日话题

目前建有江西|湖南|湖北 籍 前端群,想进群的可以加我微信 lxchuan12 进群。分享、收藏、点赞、在看我的文章就是对我最大的支持~文章来源地址https://www.toymoban.com/news/detail-760942.html

到了这里,关于你可能从未使用过的调试 Vue3 (开源项目) 源码的方式的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Vue3中使用tinymce全功能演示,包括开源功能

    效果图: 1、下载插件: 2、在node_modules文件夹中找到tinymce下的skins复制到项目public文件夹中     (可以先创建一个tinymce文件夹):   3、在tinymce官网中下载中文包,并放在刚刚创建的tinymce文件夹中 Language Packages | Trusted Rich Text Editor | TinyMCE   前往官网 点击按钮下载全部语

    2024年02月05日
    浏览(50)
  • 【vue3】使用vite构建vue3项目

    ==😉博主:初映CY的前说(前端领域) ,📒本文核心:使用vite构建vue3项目 【前言】 当我们选择了vue3作为我们项目的开发,就更加的推荐使用vite来对我们的项目进行打包。很简单——这也是开发vue的团队开发的工具,因此支持性肯定比传统的打包工具好,下面我们就来使用vi

    2024年02月06日
    浏览(56)
  • 这可能是中国最好的13个开源项目

    好的开源项目对体验工具功能、加快开发速度、学习实现逻辑都能提供极大的便利。 然而,近些年开源项目数量暴涨、质量难以避免地有些良莠不齐。如何辨别高质量的开源项目呢? 隶属工信部中国电子技术标准化研究院的中国开源云联盟(COSCL)评出了2022年度13款优秀开源

    2024年02月05日
    浏览(39)
  • 开源django+mysql+vue3前后端分离商城baykeShop使用指南

    baykeShop(拜客商城系统)是一款全开源Python栈商城系统,后端依托django强大的框架体系,本项目融合了django的传统模版体系,同时轻微结合了前后端分离的开发方式,在不同场景选择了不同的技术栈,使其更具学习和研究价值,并且很好的打包为一个Python包文件,使其二次开

    2024年02月11日
    浏览(63)
  • Vue3项目中使用TypeScript

    在单文件组件中使用 TypeScript,需要在 小结: 注意 当 script 中使用了 ts ,模板 template 在绑定表达式时也支持ts。 如果在表达式中不指名类型时,编译器会报警告提示。 正确写法 表达式指定类型 基于运行时声明 当使用 基于类型声明 通过泛型来定义 Props 语法规定 传递给

    2023年04月20日
    浏览(41)
  • vue3项目中使用pinia

    前言: 官网地址 https://pinia.vuejs.org/zh/ 中文文档 https://pinia.web3doc.top/ pinia    作为Vue.js 状态管理库 类型安全、可扩展性以及模块化设计。 甚至让你忘记正在使用的是一个状态库。 优点:   优点 dev-tools 支持 跟踪动作、突变的时间线 Store 出现在使用它们的组件中 time travel

    2023年04月26日
    浏览(46)
  • jsx (vue3项目中使用)

    一、什么是jsx 在 JavaScript 里面写 HTML 的语法,就叫做 JSX,算是对 JavaScript 语法的一个扩展. (在vue3项目中相当于单文件组件,.vue)使用的是jsx语法 二、jsx语法 1.插值。与 vue 模板语法中的插值一样,但是双大括号 {{}} 变为了单大括号 {}。大括号内支持任何有效的 JavaScript 表

    2024年01月17日
    浏览(42)
  • 那些年我们用过的机械键盘【一把键盘,无限可能】

    ❤写在前面:看标题就知道这是一期安利的文章,是来自博主的亲身体验,键盘对于程序员的意义,就像是你的左膀右臂,文章将 从K1~K8,Q1测评 ,希望能为你排忧解难! ❤博客主页: 努力的小鳴人 ❤下面我们直接进入正题! Keychron是一个网红机械键盘,可以同时兼容多款操

    2024年01月17日
    浏览(42)
  • Vue3.2 + TypeScript + Pinia + Vite4 + Element-Plus + 微前端(qiankun) 后台管理系统模板(已开源---显示项目页面截图)

    Wocwin-Admin,是基于 Vue3.2、TypeScript、Vite、Pinia、Element-Plus、Qiankun(微前端) 开源的一套后台管理模板;同时集成了微前端 qiankun也可以当做一个子应用。项目中组件页面使用了Element-plus 二次封装 t-ui-plus 组件,目前已新增fastmock接口。 Link:https://wocwin.github.io/wocwin-admin/ 账号:

    2024年02月08日
    浏览(82)
  • vue3项目中使用three.js

    在vue3项目中,通过three.js使用了一段短小但完整的代码实现了实际的三维效果图。 Three.js是一个轻量级,跨平台的Javascript库,可以在浏览器上结合HTML5的canvas,SVG或者WebGL,创建和展示3D模型和动画。 Three.js允许我们在不依赖任何浏览器插件的情况下,创建一个GPU加速的3D动画场

    2024年01月23日
    浏览(52)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包