vue源码解析(一) --- 源码文档树 + 核心core入口

199 阅读2分钟

笔者当前项目中使用的是vue 2.6.10版本

1. vue

从项目node_modules中找到vue文件夹,即为包含源码全文件夹,一共包含6个文件或文件夹。其中:







  • dist --- 打包构建好的vue源码,当我们进行调式查看更改对象变化时会进入这里(可以debugger尝试一下)
  • src --- 真正的源码文件
  • types --- 跟typeScript有关的文件(还没明白作用)
  • LICENSE()
  • package.json
  • README.md

2. src

  • complier --- 编译相关
  • core --- 核心源码,主要看的部分
  • platforms --- web端或者是weex
  • server --- 服务端渲染
  • sfc --- 单位件组件
  • shared --- 公共方法、变量

接下来我们正式从core文件开始分析:

2. 前言

笔者将会尝试按照自己的理解逐个功能进行解析,以加深理解,留下印象,同时分享一些自己对vue的理解。此外,笔者参照了另外几位大大的感人分享:

HuangYi --- 链接
muwoo --- 链接

// core/index.js
<!--引入Vue实例,这个才是整个框架的源头吧-->
<!--instance文件里面包含了各种实例,类似于功能函数-->
<!--所以,vue归根到底可以认为是一个实例或一个功能函数-->
<!--然后在其原型上添加各种方法,渐进增强其拥有的功能,这是笔者对“vue为一个渐进式js框架”的理解-->
import Vue from './instance/index'
<!--引入全局API-->
<!--如定义我们全局使用this.$set(), this.$delete()方法-->
import { initGlobalAPI } from './global-api/index'
<!--很多地方我们可以根据变量的英文意思推断出其功能含义-->
<!--这里应该是一个跟服务端渲染有关的boolean值,应该返回“是不是服务端渲染”判断结果-->
import { isServerRendering } from 'core/util/env'
<!--功能组件的渲染,应该是类似v-slot这样的-->
import { FunctionalRenderContext } from 'core/vdom/create-functional-component'

<!--初始化全局API-->
initGlobalAPI(Vue)

<!--vue原型上添加“$isServer”属性,应该是只可以访问,不可以修改的-->
Object.defineProperty(Vue.prototype, '$isServer', {
  get: isServerRendering
})

<!--vue原型上添加“$ssrContext”属性,应该是只可以访问,不可以修改的-->
Object.defineProperty(Vue.prototype, '$ssrContext', {
  get () {
    /* istanbul ignore next */
    return this.$vnode && this.$vnode.ssrContext
  }
})

// expose FunctionalRenderContext for ssr runtime helper installation
<!--为ssr运行时帮助程序的安装暴露“FunctionalRenderContext”???我自己翻译的,我也不懂什么意思^_^-->
<!---->
Object.defineProperty(Vue, 'FunctionalRenderContext', {
  value: FunctionalRenderContext
})

Vue.version = '__VERSION__'

export default Vue