初看vue3源码
因为工作的原因又回到了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:面向公众的“完整构建”,其中包括运行时和编译器。私人实用程序包:
dts-test:包含针对生成的 dts 文件的仅类型测试。sfc-playground:游乐场持续部署在https://play.vuejs.org。要在本地运行游乐场,请使用nr dev-sfc.template-explorer:用于调试编译器输出的开发工具,持续部署在https://template-explorer.vuejs.org/。要在本地运行它,请运行nr dev-compiler.
包的依赖关系

可见平时常用的vue api 都是从vue 这个包到处的
另外一些与平台无关的包 课可以独立使用
reactivity:反应系统。它可以作为与框架无关的包独立使用。runtime-core:与平台无关的运行时核心
例如
import { h } from '@vue/runtime-core'
初看vue3源码的更多相关文章
- 初看Mybatis 源码 (三) SQL是怎么执行的
前面说到Java动态代理,Mybatis通过这种方式实现了我们通过getMapper方式得到的Dao接口,可以直接通过接口的没有实现的方法来执行sql. AuthUserDao mapper = se ...
- 初看Mybatis 源码 (二) Java动态代理类
先抛出一个问题,用过Mybatis的都知道,我们只需要定义一个Dao的接口,在里面写上一些CRUD相关操作,然后配置一下sql映射文件,就可以达到调用接口中的方法,然后执行sql语句的效果,为什么呢? ...
- 初看Mybatis 源码 (一)
Mybatis 的使用,首先需要构建一个SqlSessionFactory 实例.而该实例可以通过SqlSessionFactoryBuilder来创建. String resource = &quo ...
- vue3源码难学,先从petite-vue开始吧
如今这个世道,作为一个有几年工作经验的前端,不学点框架源码都感觉要被抛弃了,react或vue要能吹吹牛吧,最好能造个轮子,听说vue3源码好学点,那么学学vue3,但是学起来还是那么费劲,感觉快放弃 ...
- 【实习记】2014-08-15文档太少看着源码用cgicc+stl库之模板谓词函数对象
总结1: 今天找到了昨天scanf的问题答案,scanf与printf一样的神奇而复杂,稍不留神,就会被坑.scanf函数在读入非空白符分割的多个字符串的解决方法是这个:/* 以 | 分割 * ...
- 边看MHA源码边学Perl语言之一开篇
边看MHA源码边学Perl语言之一开篇 自我简介 先简单介绍一下自己,到目前为此我已经做了7年左右的JAVA和3年左右php开发与管理,做java时主要开发物流行业的相关软件,对台湾快递,国际快递,国 ...
- 带着萌新看springboot源码8(spring ioc源码 完)
上一节说到实例化了所有的单实例Bean,后面还有一步遍历 12.完成容器刷新(finishRefresh();) 那个和生命周期有关的后置处理器类型是LifecycleProcessor:监听器原理我 ...
- 一点一点看JDK源码(〇)
一点一点看JDK源码(〇) liuyuhang原创,未经允许进制转载 写在前面: 几乎所有的大神都会强调看源码,也强调源码的重要性: 但是如何看源码,源码看什么?看了什么用?看了怎么用? 困扰很多人, ...
- 一点一点看JDK源码(一)Collection体系概览
一点一点看JDK源码(一)Collection体系概览 liuyuhang原创,未经允许进制转载 本文举例使用的是JDK8的API 目录:一点一点看JDK源码(〇) 1.综述 Collection为集 ...
- 一点一点看JDK源码(二)java.util.List
一点一点看JDK源码(二)java.util.List liuyuhang原创,未经允许进制转载 本文举例使用的是JDK8的API 目录:一点一点看JDK源码(〇) 1.综述 List译为表,一览表, ...
随机推荐
- RHCSA题目大纲
1.配置IP地址2.配置软件仓库3.调试SELinux4.创建用户账户5. 配置cron计划任务6.创建共享目录7.配置NTP时间客户端 "chronyd服务"8. auto自动 ...
- P7897
problem && blog 第一道正经的 Ynoi,特此写篇题解纪念一下. Algorithm 1 可以想到 \(O(nm)\) 的 DP. 我们定义 \(dp_u\) 为 \(u ...
- 自建yum源
自定义yum本地仓库 你不需要依赖外网的yum仓库,可能导致该仓库无法访问,下载软件失败.. 大公司,会自建yum仓库 防止出现网络问题,自建了yum仓库,本地yum仓库 你可以去阿里云上,部署一个在 ...
- npm 发布自己的组件库
npm 发布组件库步骤 第一步:注册 npm 账号 第二步:编写自己的组件库 第三部:编写 package.json 可以通过命令生成 npm init { "name": &qu ...
- 抖音验证签名和接口含中文签名,需要在发送端加上utf8编码
抖音验证签名和接口含中文签名,需要在发送端加上utf8编码 抖音验签和抖音异步通知回调验签解决:是对整个接收的字符串做验签,而不是部分数据做验签解决中文参数问题,否则中文乱码报验签错误 签名算法htt ...
- 我所关注的几个spring设计模式
Spring框架中实现了许多的设计模式,而且都是非常优先的实现,这些值得我们学好好习. 不过话说回来,我觉得自己只要关注几个即可: 单例 工厂 代理 适配器 观察者 委派 在各种设计模式中,适配器和装 ...
- python之集合学习
*******************集合{set}******************* 1.集合set 可变 特点:是由不同元素组成 是无序的 集合中元素必须是不可变类型例如(字符串/元祖/数字) ...
- 小米节假日API, 查询调休
小米的节假日API, 用于查询一年中的第X天是否正在放假或是在调休. 在浏览器中打开保存下来, 一年只需要调用一次即可. https://api.comm.miui.com/holiday/holid ...
- .NET Core WebApi接口ip限流实践
.NET Core WebApi接口ip限流实践 前言 之前一直想实现接口限流,但一直没去实现,然后刚好看到一篇文章是基于AspNetCoreRateLimit 组件的限流策略.这个组件不做多的介绍, ...
- Java 将Markdown文件转换为Word和PDF文档
Markdown 凭借其简洁易用的特性,成为创建和编辑纯文本文档的常用选择.但某些时候我们需要更加精致的展示效果,例如在专业分享文档或打印成离线使用的纸质版时,就需要将Markdown文件以其他固定的 ...