Vue 소스 분석 (1) - 소스 구성 구조 분석
이 시리즈 분석의 Vue.js 버전은: v2.2.6, vue-dev 창고에 있는dist/vue입니다.js에서 원본 코드를 찾았습니다.
1. 전체 구조
(function (global, factory) {
typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
typeof define === 'function' && define.amd ? define(factory) :
(global.Vue = factory());
}(this, (function () { })));
브라우저에서
// factory ,
window.Vue=factory()
익명 함수는 최종적으로 Vue$3 구조 함수를 되돌려주기 때문에 위 코드가 실제로 실행됩니다
window.Vue=Vue$3;
이 익명 함수, 즉factory가 실행하는 동안 어떤 일을 했는지 보십시오. (명시되지 않은 줄 수는 대부분 도구류 함수 정의입니다. 여기서 생략하고 호출된 후에 보십시오.)
initMixin(Vue$3);
stateMixin(Vue$3);
eventsMixin(Vue$3);
lifecycleMixin(Vue$3);
renderMixin(Vue$3);
extend(Vue$3.options.directives, platformDirectives);
extend(Vue$3.options.components, platformComponents);
2、initMixin(Vue$3)
Vue.prototype._init = function (options?: Object) {}
3、stateMixin(Vue$3)
Vue.prototype.$data
Vue.prototype.$set = set
Vue.prototype.$delete = del
Vue.prototype.$watch = function(){}
4、eventsMixin(Vue$3)
Vue.prototype.$on = function (event: string, fn: Function): Component {}
Vue.prototype.$once = function (event: string, fn: Function): Component {}
Vue.prototype.$off = function (event?: string, fn?: Function): Component {}
Vue.prototype.$emit = function (event: string): Component {}
5、lifecycleMixin(Vue$3)
Vue.prototype._mount = function(){}
Vue.prototype._update = function (vnode: VNode, hydrating?: boolean) {}
Vue.prototype._updateFromParent = function(){}
Vue.prototype.$forceUpdate = function () {}
Vue.prototype.$destroy = function () {}
6、renderMixin(Vue$3)
Vue.prototype.$nextTick = function (fn: Function) {}
Vue.prototype._render = function (): VNode {}
Vue.prototype._s = _toString
Vue.prototype._v = createTextVNode
Vue.prototype._n = toNumber
Vue.prototype._e = createEmptyVNode
Vue.prototype._q = looseEqual
Vue.prototype._i = looseIndexOf
Vue.prototype._m = function(){}
Vue.prototype._o = function(){}
Vue.prototype._f = function resolveFilter (id) {}
Vue.prototype._l = function(){}
Vue.prototype._t = function(){}
Vue.prototype._b = function(){}
Vue.prototype._k = function(){}
7、initGlobalAPI(Vue$3)
Vue.config
Vue.util = util
Vue.set = set
Vue.delete = del
Vue.nextTick = util.nextTick
Vue.options = {
components: {
KeepAlive
},
directives: {},
filters: {},
_base: Vue
}
Vue.use
Vue.mixin
Vue.cid = 0
Vue.extend
Vue.component = function(){}
Vue.directive = function(){}
Vue.filter = function(){}
Vue.prototype.$isServer
Vue.version = '__VERSION__'
8、extend()
Vue.options = {
components: {
KeepAlive,
Transition,
TransitionGroup
},
directives: {
model,
show
},
filters: {},
_base: Vue
}
9. 이 절의 수확:
마지막: 구축된 원본 코드를 좋아하지 않고 구축 전의 코드를 보는 사람들이 있을 수 있습니다. 여기서 vue-dev 구축 과정과 전체 구조 분석에 대해 비교적 잘 쓴 글을 추천합니다. 본고는 일부 참고가 있습니다. 주소는 여기에 있습니다.
vue2 원본 구축 과정 분석
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.