Vue源码主入口:src/core/index.js
import Vue from './instance/index' // 引用Vue构造器
import { initGlobalAPI } from './global-api/index' // 调用initGlobalAPI方法,定义全局资源
import { isServerRendering } from 'core/util/env'
import { FunctionalRenderContext } from 'core/vdom/create-functional-component'
initGlobalAPI(Vue)
...
Vue.version = '__VERSION__'
export default Vue //暴露Vue
打印出Vue构造器的属性及原型对象属性,此时原型对象已额外定义了30个原型对象属性及一个自动获得的constructor(构造函数)属性(Vue.prototype.constructor === Vue)
https://segmentfault.com/img/...
该图片引用自:【Vue源码探究一】当我们引入Vue,我们引入了什么?
然后查看src/core/global-api/index中的initGlobalAPI方法,将Vue构造器作为参数传入
export function initGlobalAPI (Vue: GlobalAPI) {
// config
const configDef = {}
/**
// 全局配置: config中的参数
config = {
optionMergeStrategies: Object.create(null), // 合并策略的选项
silent: false, // 取消 Vue 所有的日志与警告
devtools: process.env.NODE_ENV !== 'production', // 配置是否允许 vue-devtools 检查代码。开发版本默认为 true,生产版本默认为 false。生产版本设为 true 可以启用检查。
performance: false, // 设置为 true 以在浏览器开发工具的性能|时间线面板中启用对组件初始化、编译、渲染和打补丁的性能追踪。只适用于开发模式和支持 performance.mark API 的浏览器上
errorHandler: null, // 指定组件的渲染和观察期间未捕获错误的处理函数
warnHandler: null, // 为 Vue 的运行时警告赋予一个自定义处理函数。注意这只会在开发者环境下生效,在生产环境下它会被忽略。
ignoredElements: [],
keyCodes: Object.create(null), // 给 v-on 自定义键位别名
isReservedTag: no,
isReservedAttr: no,
isUnknownElement: no,
getTagNamespace: noop,
parsePlatformTagName: identity,
}
**/
configDef.get = () => config // import config from '../config'
if (process.env.NODE_ENV !== 'production') {
configDef.set = () => {
util.warn(
// Vue.config = {...}会触发setter,设置config中属性不会,Vue.config.silent = true (取消 Vue 所有的日志与警告)
'Do not replace the Vue.config object, set individual fields instead.'
)
}
}
// 各种全局配置项
Object.defineProperty(Vue, 'config', configDef)
Vue.util = util // 各种工具函数,及一些兼容性的标志位
Vue.set = set // Vue.set
Vue.delete = del // Vue.delete
Vue.nextTick = util.nextTick
Vue.options = Object.create(null) // Vue默认提供的资源
// ASSET_TYPES: ["component", "directive", "filter"]
config._assetTypes.forEach(type => {
Vue.options[type + 's'] = Object.create(null)
})
Vue.options._base = Vue
//builtInComponents: {KeepAlive: KeepAlive}
util.extend(Vue.options.components, builtInComponents)
initUse(Vue) // Vue.use
initMixin(Vue) // Vue.minxin
initExtend(Vue) // Vue.extend
initAssetRegisters(Vue)
}
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。