使用 vue 有段时间了,对 vue 的认识还停留在使用上,即便代码写的很 6 ,也只过是个 API 工程师,这样但是不行的呀。 遂心生看源码的念头,一是能够学习大神们的代码、编程技巧,二来也能够看看 vue 的实现原理。有点滴收获也是好的。vue
我看的版本是 2.6.10,是目前 (19.11) 线上的最新的版本了。 首先咱们先看下 vue 源码核心的代码结构。node
src
├── compiler # 编译相关
├── core # 核心代码
├── platforms # 不一样平台的支持
├── server # 服务端渲染
├── sfc # .vue 文件解析
├── shared # 共享代码
复制代码
vue 在构建时,运行的是 npm run build
指令,实际上执行的是node scripts/build.js
。git
"build": "node scripts/build.js",
复制代码
在scripts/build.js
文件中:github
// 读取配置文件
let builds = require("./config").getAllBuilds()
复制代码
而在配置文件scripts/config.js
中,主要是像下面这样的配置,有不少。web
'web-runtime-cjs-dev': {
entry: resolve('web/entry-runtime.js'), // 构建文件的入口
dest: resolve('dist/vue.runtime.common.dev.js'), // 构建文件的出口
format: 'cjs', // 构建出来的文件的规范
env: 'development', // 运行环境
banner
},
复制代码
以web-full-cjs-prod
这个配置为例,它的构建初始化过程以下图所示。npm
接下来,咱们带着问题去分析下具体的源码。
好比说 Vue 是如何将模板渲染成虚拟 DOM 的?
因为咱们主要是弄明白 Vue 的实现原理,因此此部分代码是精简后的,想看所有的代码能够从 GitHub 上拉取。编程