笔者当前项目中使用的是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的理解。此外,笔者参照了另外几位大大的感人分享:
// 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