手牵手,从零学习Vue源码 系列一(前言-目录篇)
系列文章:
陆续更新中...
预计八月中旬更新完毕。
1 前言
作为一名前端开发人员,日常开发使用Vue.js,对于各种Api使用都是只知其然而不知其所以然,不想日复一日的从入门到入门,我们已经都这个岁数了,是时候做出一些改变了!
于是我决定从即日起从GitHub上clone下来一份Vue.js源码来深入研究,本系列将一直更新至博文对Vue源码的整个学习过程,以及自己在过程中的一些理解。一方面开阔自己的知识视野,另一方面也希望这些文字能够带给大家些许帮助。
2. 学习规划
2.1 源码学习目录
本项目所剖析的「Vue.js」源码版本是目前最新的版本,版本号为「v2.9.6」,其代码目录如下:
├─ .circleci | 持续集成/持续部署的服务,根据配置,提供运行环境,执行测试、构建和部署。
│
├─ .github | 存放关于github上的一些配置
│
├─ .benchmarks | 验证性能、获得一些基准数据,可以与本软件的其他版本或同类软件进行比较
│
├─ dist | 项目构建后的文件
│
├─ examples | 示例文件
│
├─ flow | facebook 出品的 JavaScript 静态类型检查工具
│
├─ packages | 包含服务端渲染和模板编译器两种不同的NPM包,是提供给不同使用场景使用的
│
├─ scripts | 存放npm脚本配置文件,结合webpack、rollup进行编译、测试、构建等操作(使用者不需要关心)
│
│ ├─ alias.js | 模块导入所有源代码和测试中使用的别名
│ │
│ ├─ config.js | 包含在'dist'中找到的所有文件的生成配置
│ │
│ └─ build.js | 对 config.js 中所有的rollup配置进行构建
│
├─src | 项目源代码
│
│ ├─ compiler | 解析模版相关
│ │ ├─ codegen | 把AST转换为Render函数
│ │ │
│ │ ├─ directives | 通用生成Render函数之前需要处理的指令
│ │ └─ parser | 解析模版成AST
│ ├─core | 通用的、与运行平台无关的运行时代码
│ │
│ │ ├─components | 内置组件的代码
│ │ │
│ │ ├─global-api | Vue全局API,如Vue.use,Vue.extend,Vue.mixin等
│ │ │
│ │ ├─instance | 实例化相关内容,生命周期、事件等
│ │ │
│ │ ├─observer | 响应式核心目录,双向数据绑定相关文件
│ │ │
│ │ ├─util | 工具方法
│ │ │
│ │ └─vdom | 包含虚拟DOM 创建(creation)和打补丁(patching) 的代码
│ │
│ ├─platforms | 特定运行平台的代码,如weex
│ │
│ │ ├─web | web端
│ │ │ ├─ compiler | web端编译相关代码,用来编译模版成render函数basic.js
│ │ │ │
│ │ │ ├─ runtime | web端运行时相关代码,用于创建Vue实例等
│ │ │ │
│ │ │ ├─ server | 服务端渲染
│ │ │ │
│ │ │ └─ util | 相关工具类
│ │ │
│ │ └─weex | 基于通用跨平台的 Web 开发语言和开发经验,来构建 Android、iOS 和 Web 应用
│ │
│ ├─server | 与服务端渲染相关的代码
│ │
│ ├─sfc | 单文件组件的解析代码
│ │
│ └─shared | 项目公用的工具代码
│
├─ test | 项目测试代码
│
├─ types | Vue新版本支持TypeScript,主要是TypeScript类型声明文件
│
├─ .babelrc.js | babel配置
│
├─ .editorconfig | 文本编码样式配置文件
│
├─ .eslintignore | eslint校验忽略文件
│
├─ .eslintrc.js | eslint配置文件
│
├─ .flowconfig | flow配置文件
│
├─ .gitignore | Git提交忽略文件配置
│
├─ BACKERS.md | 赞助者信息文件
│
├─ LICENSE | 项目开源协议
│
├─ README.md | 说明文件
│
├─ package.json | 依赖
│
└─ yarn.lock | yarn版本锁定文件
「从上面的目录结构可以看出,Vue的整个项目包含了类型检测相关、单元测试相关、与平台无关的核心代码以及跨平台运行的相关代码。」
由于我们只是学习Vue.js的设计思想以及代码实现的相关逻辑,所以我们暂不去关心类型检测、单元测试以及特定平台运行等相关逻辑实现,仅关注它的核心代码,即src/core和src/complier这两个目录下的代码,并且接下来后续的学习也都是只在这两个目录的范围之内。
2.2 学习路线
在学习之前,我们需要先制定一个学习路线,循序渐进的学习,这样不至于一头雾水,无处下手。后面的学习路线如下:
「变化侦测篇」
---- 学习Vue中如何实现数据的响应式系统,从而达到数据驱动视图;
「虚拟DOM篇」
---- 学习什么是虚拟DOM,以及Vue中的DOM-Diff原理;
「模板编译篇」
---- 学习Vue内部是怎么把template模板编译成虚拟DOM,从而渲染出真实DOM;
「实例方法篇」
---- 学习Vue中所有实例方法(即所有以$开头的方法)的实现原理;
「全局API篇」
---- 学习Vue中所有全局API的实现原理;
「生命周期篇」
---- 学习Vue中组件的生命周期实现原理;
「指令篇」
---- 学习Vue中所有指令的实现原理;
「过滤器篇」
---- 学习Vue中所有过滤器的实现原理;
「内置组件篇」
---- 学习Vue中内置组件的实现原理;
2.3 学习输出
通过一步步的学习,博主打算在学习过程中输出以下三个东西:
以博客记录源码分析的过程; clone下来的Vue源码添加尽可能详细的注释,详细的解读; 做一份思维导图,以宏观角度总览源码;
文章参考资料:
难凉热血的剖析Vue源码 不知什么原因该大佬的gitHub资源消失了,大家也可以关注这位大佬的其他git项目,受益匪浅; VNode虚拟DOM学习 - violet-jack 文章关于源码的一些使用解读,参考了这位大佬的文章;
关于本系列文章,其实更多的是参考的各大佬的博客、gitHub,加上自己的总结,希望与大家共同进步!
系列文章:
陆续更新中...
预计八月中旬更新完毕。
我曾踏足山巅,也曾跌入低谷,这两者都让我受益良多。个人网站:https://zhaohongcheng.com
手牵手,从零学习Vue源码 系列一(前言-目录篇)的更多相关文章
- 手牵手,从零学习Vue源码 系列二(变化侦测篇)
系列文章: 手牵手,从零学习Vue源码 系列一(前言-目录篇) 手牵手,从零学习Vue源码 系列二(变化侦测篇) 陆续更新中... 预计八月中旬更新完毕. 1 概述 Vue最大的特点之一就是数据驱动视 ...
- 学习 vue 源码 -- 响应式原理
概述 由于刚开始学习 vue 源码,而且水平有限,有理解或表述的不对的地方,还请不吝指教. vue 主要通过 Watcher.Dep 和 Observer 三个类来实现响应式视图.另外还有一个 sch ...
- 一起学习vue源码 - Object的变化侦测
作者:小土豆biubiubiu 博客园:www.cnblogs.com/HouJiao/ 掘金:https://juejin.im/user/58c61b4361ff4b005d9e894d 简书:h ...
- 大白话Vue源码系列(03):生成AST
阅读目录 AST 节点定义 标签的正则匹配 解析用到的工具方法 解析开始标签 解析结束标签 解析文本 解析整块 HTML 模板 未提及的细节 本篇探讨 Vue 根据 html 模板片段构建出 AST ...
- 大白话Vue源码系列(05):运行时鸟瞰图
阅读目录 Vue 实例的生命周期 实例创建 响应的数据绑定 挂载到 DOM 节点 结论 研究 runtime 一边 Vue 一边源码 初看 Vue 是 Vue 源码是源码 再看 Vue 不是 Vue ...
- 大白话Vue源码系列(02):编译器初探
阅读目录 编译器代码藏在哪 Vue.prototype.$mount 构建 AST 的一般过程 Vue 构建的 AST 题接上文,上回书说到,Vue 的编译器模块相对独立且简单,那咱们就从这块入手,先 ...
- 大白话Vue源码系列(03):生成render函数
阅读目录 优化 AST 生成 render 函数 小结 本来以为 Vue 的编译器模块比较好欺负,结果发现并没有那么简单.每一种语法指令都要考虑到,处理起来相当复杂.上篇已经生成了 AST,本篇依然对 ...
- 大白话Vue源码系列(04):生成render函数
阅读目录 优化 AST 生成 render 函数 小结 本来以为 Vue 的编译器模块比较好欺负,结果发现并没有那么简单.每一种语法指令都要考虑到,处理起来相当复杂.上篇已经生成了 AST,本篇依然对 ...
- 【转】手摸手,带你用vue撸后台 系列二(登录权限篇)
前言 拖更有点严重,过了半个月才写了第二篇教程.无奈自己是一个业务猿,每天被我司的产品虐的死去活来,之前又病了一下休息了几天,大家见谅. 进入正题,做后台项目区别于做其它的项目,权限验证与安全性是非常 ...
随机推荐
- Spring Boot入门系列(十七)整合Mybatis,创建自定义mapper 实现多表关联查询!
之前讲了Springboot整合Mybatis,介绍了如何自动生成pojo实体类.mapper类和对应的mapper.xml 文件,并实现最基本的增删改查功能.mybatis 插件自动生成的mappe ...
- Python数据结构-树与树的遍历
树:是一种抽象的数据类型 树的作用:用来模拟树状结构性质的数据集合 树的特点: 每个节点有零个或者多个节点 没有父节点的节点,叫做根节点 每一个根节点有且只有一个父节点 除了根节点外,每个节点可以分成 ...
- python_Linux系统的常用命令(三)
用户权限常用命令 1.用户和权限 r--读--4, w--写--2, x--执行--1 chmod 可以修改用户/组对文件/目录的权限 格式:chmod +/-rwx 文件名/目录名 su -用户:切 ...
- Spring笔记(3) - debug源码AOP原理解析
案例 @EnableAspectJAutoProxy//开启基于注解的aop模式 @Configuration public class AOPConfig { //业务逻辑类加入容器中 @Bean ...
- Synchronized锁的是什么?
Synchronized锁的是什么? 临界区与锁 并发编程中不可避免的会出现多个线程共享同一个资源的情况,为了防止出现数据不一致情况的发生,人们引入了临界区的概念.临界区是一个用来访问共享资源的代码块 ...
- C/C++编程语言制作《游戏内存外挂》
通过C/C++编程语言编写一个简单的外挂,通过 API 函数修改游戏数据,从而实现作弊功能 对象分析要用的 API 函数简单介绍编写测试效果. 下面是我整理好的全套C/C++资料,加入天狼QQ7269 ...
- BERT模型图解
转载于 腾讯Bugly 发表于 腾讯Bugly的专栏 原文链接:https://cloud.tencent.com/developer/article/1389555 本文首先介绍BERT模型要做什么 ...
- day44 初识数据库
目录 一.数据的演变 二.数据库 三.MySQL 1 基本原理 2 重要概念介绍 3 安装 4 启动 5 sql基本语句 6 环境变量的配置及系统服务制作 7 关于密码 8 统一编码 9 基本sql语 ...
- mysqladmin 的用法及所带参数
- Linux07 /redis的配置、五大数据类型、发布订阅、持久化、主从复制、哨兵配置、集群搭建
Linux07 /redis的配置.五大数据类型.发布订阅.持久化.主从复制.哨兵配置.集群搭建 目录 Linux07 /redis的配置.五大数据类型.发布订阅.持久化.主从复制.哨兵配置.集群搭建 ...