系列文章:

陆续更新中...

预计八月中旬更新完毕。

1 前言

作为一名前端开发人员,日常开发使用Vue.js,对于各种Api使用都是只知其然而不知其所以然,不想日复一日的从入门到入门,我们已经都这个岁数了,是时候做出一些改变了!

于是我决定从即日起从GitHub上clone下来一份Vue.js源码来深入研究,本系列将一直更新至博文对Vue源码的整个学习过程,以及自己在过程中的一些理解。一方面开阔自己的知识视野,另一方面也希望这些文字能够带给大家些许帮助。

2. 学习规划

2.1 源码学习目录

本项目所剖析的「Vue.js」源码版本是目前最新的版本,版本号为「v2.9.6」,其代码目录如下:

  1. ├─ .circleci | 持续集成/持续部署的服务,根据配置,提供运行环境,执行测试、构建和部署。

  2. ├─ .github | 存放关于github上的一些配置

  3. ├─ .benchmarks | 验证性能、获得一些基准数据,可以与本软件的其他版本或同类软件进行比较

  4. ├─ dist | 项目构建后的文件

  5. ├─ examples | 示例文件

  6. ├─ flow | facebook 出品的 JavaScript 静态类型检查工具

  7. ├─ packages | 包含服务端渲染和模板编译器两种不同的NPM包,是提供给不同使用场景使用的

  8. ├─ scripts | 存放npm脚本配置文件,结合webpackrollup进行编译、测试、构建等操作(使用者不需要关心)

  9. ├─ alias.js | 模块导入所有源代码和测试中使用的别名

  10. ├─ config.js | 包含在'dist'中找到的所有文件的生成配置

  11. └─ build.js | config.js 中所有的rollup配置进行构建

  12. ├─src | 项目源代码

  13. ├─ compiler | 解析模版相关
  14. ├─ codegen | AST转换为Render函数

  15. ├─ directives | 通用生成Render函数之前需要处理的指令
  16. └─ parser | 解析模版成AST
  17. ├─core | 通用的、与运行平台无关的运行时代码

  18. ├─components | 内置组件的代码

  19. ├─global-api | Vue全局API,如Vue.use,Vue.extend,Vue.mixin

  20. ├─instance | 实例化相关内容,生命周期、事件等

  21. ├─observer | 响应式核心目录,双向数据绑定相关文件

  22. ├─util | 工具方法

  23. └─vdom | 包含虚拟DOM 创建(creation)和打补丁(patching) 的代码

  24. ├─platforms | 特定运行平台的代码,如weex

  25. ├─web | web
  26. ├─ compiler | web端编译相关代码,用来编译模版成render函数basic.js

  27. ├─ runtime | web端运行时相关代码,用于创建Vue实例等

  28. ├─ server | 服务端渲染

  29. └─ util | 相关工具类

  30. └─weex | 基于通用跨平台的 Web 开发语言和开发经验,来构建 AndroidiOS Web 应用

  31. ├─server | 与服务端渲染相关的代码

  32. ├─sfc | 单文件组件的解析代码

  33. └─shared | 项目公用的工具代码

  34. ├─ test | 项目测试代码

  35. ├─ types | Vue新版本支持TypeScript,主要是TypeScript类型声明文件

  36. ├─ .babelrc.js | babel配置

  37. ├─ .editorconfig | 文本编码样式配置文件

  38. ├─ .eslintignore | eslint校验忽略文件

  39. ├─ .eslintrc.js | eslint配置文件

  40. ├─ .flowconfig | flow配置文件

  41. ├─ .gitignore | Git提交忽略文件配置

  42. ├─ BACKERS.md | 赞助者信息文件

  43. ├─ LICENSE | 项目开源协议

  44. ├─ README.md | 说明文件

  45. ├─ package.json | 依赖

  46. └─ 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源码添加尽可能详细的注释,详细的解读;
  • 做一份思维导图,以宏观角度总览源码;

文章参考资料:

关于本系列文章,其实更多的是参考的各大佬的博客、gitHub,加上自己的总结,希望与大家共同进步!

系列文章:

陆续更新中...

预计八月中旬更新完毕。

我曾踏足山巅,也曾跌入低谷,这两者都让我受益良多。个人网站:https://zhaohongcheng.com

手牵手,从零学习Vue源码 系列一(前言-目录篇)的更多相关文章

  1. 手牵手,从零学习Vue源码 系列二(变化侦测篇)

    系列文章: 手牵手,从零学习Vue源码 系列一(前言-目录篇) 手牵手,从零学习Vue源码 系列二(变化侦测篇) 陆续更新中... 预计八月中旬更新完毕. 1 概述 Vue最大的特点之一就是数据驱动视 ...

  2. 学习 vue 源码 -- 响应式原理

    概述 由于刚开始学习 vue 源码,而且水平有限,有理解或表述的不对的地方,还请不吝指教. vue 主要通过 Watcher.Dep 和 Observer 三个类来实现响应式视图.另外还有一个 sch ...

  3. 一起学习vue源码 - Object的变化侦测

    作者:小土豆biubiubiu 博客园:www.cnblogs.com/HouJiao/ 掘金:https://juejin.im/user/58c61b4361ff4b005d9e894d 简书:h ...

  4. 大白话Vue源码系列(03):生成AST

    阅读目录 AST 节点定义 标签的正则匹配 解析用到的工具方法 解析开始标签 解析结束标签 解析文本 解析整块 HTML 模板 未提及的细节 本篇探讨 Vue 根据 html 模板片段构建出 AST ...

  5. 大白话Vue源码系列(05):运行时鸟瞰图

    阅读目录 Vue 实例的生命周期 实例创建 响应的数据绑定 挂载到 DOM 节点 结论 研究 runtime 一边 Vue 一边源码 初看 Vue 是 Vue 源码是源码 再看 Vue 不是 Vue ...

  6. 大白话Vue源码系列(02):编译器初探

    阅读目录 编译器代码藏在哪 Vue.prototype.$mount 构建 AST 的一般过程 Vue 构建的 AST 题接上文,上回书说到,Vue 的编译器模块相对独立且简单,那咱们就从这块入手,先 ...

  7. 大白话Vue源码系列(03):生成render函数

    阅读目录 优化 AST 生成 render 函数 小结 本来以为 Vue 的编译器模块比较好欺负,结果发现并没有那么简单.每一种语法指令都要考虑到,处理起来相当复杂.上篇已经生成了 AST,本篇依然对 ...

  8. 大白话Vue源码系列(04):生成render函数

    阅读目录 优化 AST 生成 render 函数 小结 本来以为 Vue 的编译器模块比较好欺负,结果发现并没有那么简单.每一种语法指令都要考虑到,处理起来相当复杂.上篇已经生成了 AST,本篇依然对 ...

  9. 【转】手摸手,带你用vue撸后台 系列二(登录权限篇)

    前言 拖更有点严重,过了半个月才写了第二篇教程.无奈自己是一个业务猿,每天被我司的产品虐的死去活来,之前又病了一下休息了几天,大家见谅. 进入正题,做后台项目区别于做其它的项目,权限验证与安全性是非常 ...

随机推荐

  1. 关于阿里云服务器Linux安装Tomcat后,外网不能访问解决方案

    这里需要提及三个方面的问题   第一个方面:Linux上启动防火墙的问题 当下比较流行的Linux镜像是CentOS,所以防火墙也随之变成了firewall,那么怎么操作这个防火墙呢?   #停止fi ...

  2. 从别人的代码中学习golang系列--01

    自己最近在思考一个问题,如何让自己的代码质量逐渐提高,于是想到整理这个系列,通过阅读别人的代码,从别人的代码中学习,来逐渐提高自己的代码质量.本篇是这个系列的第一篇,我也不知道自己会写多少篇,但是希望 ...

  3. 飞越面试官(三)--JVM

    大家好!我是本公众号唯一官方指定没头屑的小便--怕屁林.   JVM,全称Java Virtual Machine,作为执行Java程序的容器,几乎代理了Java内存与服务器内存的交互,可以说是程序拥 ...

  4. Linux傻瓜式七步完美安装Python3.7

    1 安装依赖包 yum -y install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-deve ...

  5. 如何写出高性能的CSS3动画

    小伙伴们在写CSS3动画时,会发现在手机上很多时候会感到卡顿,然后Google到的解决方案大多是开启GPU加速transform: translate3d(0,0,0); 可解决,但是为什么开启GPU ...

  6. 一天学习一点之express demo

    接着上一篇,安装了nodejs之后,再安装express,顺序执行以下命令 1.npm  -g install express; 2.npm -g express-generator; 3.使用exp ...

  7. SSTI-服务端模板注入

    SSTI-服务端模板注入漏洞 原理: 服务端模板注入是由于服务端接收了用户的输入,将其作为 Web 应用模板内容的一部分,在进行目标编译渲染的过程中,执行了用户插入的恶意内容,因而导致了敏感信息泄露. ...

  8. 【ASP.NET Core】mdl conflicts with tinymce

    When I implementd the popular Richtext Editor tinymce for this web application, it conflicts with ma ...

  9. MYSQL 之 JDBC(十五):数据库连接池

    在使用开发基于数据库的web程序时,传统的模式基本是按一下步骤: 在主程序(如servlet.bean)中建立数据库连接 进行sql操作 断开数据库连接 这种模式开发存在各种各样的问题,最重要的是:数 ...

  10. CRM【第二篇】: stark组件

    介绍: stark组件,是一个帮助开发者快速实现数据库表的增删改查+的组件.目标: 10s 中完成一张表的增删改查. 前戏: django项目启动时,自定义执行某个py文件. django启动时,且在 ...