因为工作的原因又回到了vue的领域,需要加深对vue和vue生态的了解

也许平时比较多人手机看别人解析怎么看vue源码的,自己动手看vue源码的还是比较少,这次我想自己动手看看

首先 吧代码获取到本地跑起来

vue 仓库地址 https://github.com/vuejs/

vue 开发环境 搭建指南 https://github.com/vuejs/core/blob/main/.github/contributing.md#development-setup

正常运行vue3 需要的环境

node 18.12+

pnpm 8+

另外还需要安装一个ni 工具https://github.com/antfu/ni

一些 本地常用的命令

nr  build 该脚本构建所有公共包

compiler-dom.global.prod.js min:57.9 kB / gzip:21.8 kB / brotli:19.6 kB

reactivity.global.prod.js min:12.3 kB / gzip:4.53 kB / brotli:4.18 kB

runtime-dom.global.prod.js min:85.9 kB / gzip:32.7 kB / brotli:29.5 kB

vue.global.prod.js min:132 kB / gzip:49.4 kB / brotli:44.3 kB

vue.runtime.global.prod.js min:85.9 kB / gzip:32.7 kB / brotli:29.5 kB

nr dev

该脚本在开发模式下以指定格式

packages/vue/dist/vue.global.js   可以看到  默认生成了一个vue 库的文件

nr dev-sfc

在本地开发模式下启动 SFC Playground 的快捷方式。这在调试可在 SFC Playground 中重现的问题时提供最快的反馈循环。

本地启动后的效果和 https://play.vuejs.org/ 一致

nr dev-esm

vue/dist/vue-runtime.esm-bundler.js使用 esbuild 内联所有部门进行构建和监视。在需要实际构建设置的复制中调试 ESM 构建时,这非常有用:packages/vue全局链接,然后将其链接到正在调试的项目中。

项目结构

该存储库采用monorepo设置,在目录下托管许多关联的包packages

  • reactivity:反应系统。它可以作为与框架无关的包独立使用。

  • runtime-core:与平台无关的运行时核心。包括虚拟 dom 渲染器、组件实现和 JavaScript API 的代码。可以使用此包创建针对特定平台的高阶运行时(即自定义渲染器)。

  • runtime-dom:针对浏览器的运行时。包括原生 DOM API、属性、属性、事件处理程序等的处理。

  • runtime-test:用于测试的轻量级运行时。可以在任何 JavaScript 环境中使用,因为它“呈现”纯 JavaScript 对象树。该树可用于断言正确的渲染输出。还提供用于序列化树、触发事件和记录更新期间执行的实际节点操作的实用程序。

  • server-renderer:用于服务器端渲染的包。

  • compiler-core:与平台无关的编译器核心。包括编译器的可扩展基础和所有与平台无关的插件。

  • compiler-dom:带有专门针对浏览器的附加插件的编译器。

  • compiler-sfc:用于编译 Vue 单文件组件的较低级别实用程序。

  • compiler-ssr:生成针对服务器端渲染优化的渲染函数的编译器。

  • shared:跨多个包共享的内部实用程序(尤其是运行时包和编译器包使用的与环境无关的实用程序)。

  • vue:面向公众的“完整构建”,其中包括运行时和编译器。

  • 私人实用程序包:

包的依赖关系

可见平时常用的vue api 都是从vue 这个包到处的

另外一些与平台无关的包 课可以独立使用

  • reactivity:反应系统。它可以作为与框架无关的包独立使用。

  • runtime-core:与平台无关的运行时核心

例如

import { h } from '@vue/runtime-core'

初看vue3源码的更多相关文章

  1. 初看Mybatis 源码 (三) SQL是怎么执行的

    前面说到Java动态代理,Mybatis通过这种方式实现了我们通过getMapper方式得到的Dao接口,可以直接通过接口的没有实现的方法来执行sql. AuthUserDao mapper = se ...

  2. 初看Mybatis 源码 (二) Java动态代理类

    先抛出一个问题,用过Mybatis的都知道,我们只需要定义一个Dao的接口,在里面写上一些CRUD相关操作,然后配置一下sql映射文件,就可以达到调用接口中的方法,然后执行sql语句的效果,为什么呢? ...

  3. 初看Mybatis 源码 (一)

    Mybatis 的使用,首先需要构建一个SqlSessionFactory 实例.而该实例可以通过SqlSessionFactoryBuilder来创建. String resource = &quo ...

  4. vue3源码难学,先从petite-vue开始吧

    如今这个世道,作为一个有几年工作经验的前端,不学点框架源码都感觉要被抛弃了,react或vue要能吹吹牛吧,最好能造个轮子,听说vue3源码好学点,那么学学vue3,但是学起来还是那么费劲,感觉快放弃 ...

  5. 【实习记】2014-08-15文档太少看着源码用cgicc+stl库之模板谓词函数对象

        总结1: 今天找到了昨天scanf的问题答案,scanf与printf一样的神奇而复杂,稍不留神,就会被坑.scanf函数在读入非空白符分割的多个字符串的解决方法是这个:/* 以 | 分割 * ...

  6. 边看MHA源码边学Perl语言之一开篇

    边看MHA源码边学Perl语言之一开篇 自我简介 先简单介绍一下自己,到目前为此我已经做了7年左右的JAVA和3年左右php开发与管理,做java时主要开发物流行业的相关软件,对台湾快递,国际快递,国 ...

  7. 带着萌新看springboot源码8(spring ioc源码 完)

    上一节说到实例化了所有的单实例Bean,后面还有一步遍历 12.完成容器刷新(finishRefresh();) 那个和生命周期有关的后置处理器类型是LifecycleProcessor:监听器原理我 ...

  8. 一点一点看JDK源码(〇)

    一点一点看JDK源码(〇) liuyuhang原创,未经允许进制转载 写在前面: 几乎所有的大神都会强调看源码,也强调源码的重要性: 但是如何看源码,源码看什么?看了什么用?看了怎么用? 困扰很多人, ...

  9. 一点一点看JDK源码(一)Collection体系概览

    一点一点看JDK源码(一)Collection体系概览 liuyuhang原创,未经允许进制转载 本文举例使用的是JDK8的API 目录:一点一点看JDK源码(〇) 1.综述 Collection为集 ...

  10. 一点一点看JDK源码(二)java.util.List

    一点一点看JDK源码(二)java.util.List liuyuhang原创,未经允许进制转载 本文举例使用的是JDK8的API 目录:一点一点看JDK源码(〇) 1.综述 List译为表,一览表, ...

随机推荐

  1. Nodejs中间件 中间件分类和自定义中间件

    中间件 中间件理解 中间件可以理解为业务流程的中间处理环节.如生活中吃一般炒青菜,大约分为如下几步骤 express中当一个请求到达的服务器之后,可以在给客户响应之前连续调用多个中间件,来对本次请求和 ...

  2. 使用Jsoup和htmlunit爬取动态网页

    在对http://zkgg.tjtalents.com.cn/newzxxx.jsp这个网页爬取内容时,如果只使用Jsoup进行解析的话,起内部的a href标签内容无法获取到. 但是实际上通过 Do ...

  3. kettle从入门到精通 第五十三课 ETL之kettle MQTT/RabbitMQ consumer实战

    1.上一节课我们学习了MQTT producer 生产者步骤,MQTT consumer消费者步骤.该步骤可以从支持MRQTT协议的中间件获取数据,该步骤和kafka consumer 一样可以处理实 ...

  4. 使用命令行(powershell)压缩(7Z RAR)指定日期文件

    使用命令行(powershell)压缩(7Z RAR)指定日期文件,powershell ,7z. WINDOWS命令行是无法按时间过滤文件的,我们通过powershell 里的Get-ChildIt ...

  5. 可观测性平台夜莺开源项目发布V6正式版!

    夜莺开源项目在2023.7月底发布了V6版本,这个版本开始,项目目标不止于做一款开源监控系统,而是要做一款开源可观测性平台,不过路漫漫其修远兮,初期只是把日志数据源引入并完成了基本的可视化,后续会着力 ...

  6. Isolution

    <template> <div style="float:left;width: 100%; margin-left: 0"> <el-row > ...

  7. python 判断token是否有效,若失效,重新发起token请求

    场景: 1.对一个接口,进行接口自动化测试,查找的是有权限操作的用例,传入到获取token接口,生成token,判断当前是否有token,如果存在token,则无需再次发起token接口: 存在的问题 ...

  8. ISCSI配置与挂载

    ISCSI介绍 iSCSI使用 TCP/IP 协议,来提供网络存储. 客户端挂载后,可以对其进行分区,进行格式化,就好像是安装在本机上的硬盘一样. 为了保证传输速率,通常采用光纤. 配置环境 Cent ...

  9. Nacos + Gateway网关搭建微服务

    文章所有代码GtiHub:https://github.com/Tom-shushu/work-study 里面的gateway-server和server1项目 1.Docker 部署 Nacos ...

  10. Docker部署php运行环境

    编写docker-compose.yml配置文件,使用nginx作为web服务器,转发php的请求. version: "3" services: web: image: ngin ...