源码实际上是定义了一个全局变量Vue,Vue为立即执行函数的执行结果,最终Vue=返回值exports。
立即执行函数:格式(function (){}()),立即执行函数形参为exports,立即执行时,实参为{}空对象。立即执行函数返回为exports。返回前设置exports的多个属性和方法。将exports赋给了vue。
var Vue = (function (exports) {
'use strict';
。。。。。。。。。。
exports.withModifiers = withModifiers;
exports.withScopeId = withScopeId;
Object.defineProperty(exports, '__esModule', { value: true });
return exports;
}({}));
vue使用流程:首先调用的是Vue.createApp(参数),参数为定义的数据对象,返回值为app。
然后执行的是app.mount(参数)。参数html中标签id,实现绑定。
const createApp = ((...args) => {
const app = ensureRenderer().createApp(...args);
{
injectNativeTagCheck(app);
}
const { mount } = app;
app.mount = (containerOrSelector) => {
const container = normalizeContainer(containerOrSelector);
if (!container)
return;
const component = app._component;
if (!isFunction(component) && !component.render && !component.template) {
component.template = container.innerHTML;
}
// clear content before mounting
container.innerHTML = '';
const proxy = mount(container);
if (container instanceof Element) {
container.removeAttribute('v-cloak');
container.setAttribute('data-v-app', '');
}
return proxy;
};
return app;
});