// This entry exports the runtime only, and is built as // `dist/vue.esm-bundler.js` which is used by default for bundlers. import { initDev } from './dev' import { compatUtils, createApp, Transition, TransitionGroup, KeepAlive, DeprecationTypes, vShow, vModelDynamic } from '@vue/runtime-dom' import { extend } from '@vue/shared' if (__DEV__) { initDev() } import * as runtimeDom from '@vue/runtime-dom' function wrappedCreateApp(...args: any[]) { // @ts-ignore // 兼容new Vue const app = createApp(...args) // todo: 是不是看内部组件是否兼容?? if (compatUtils.isCompatEnabled(DeprecationTypes.RENDER_FUNCTION, null)) { // register built-in components so that they can be resolved via strings // in the legacy h() call. The __compat__ prefix is to ensure that v3 h() // doesn't get affected. // 。注册内部组件 app.component('__compat__transition', Transition) app.component('__compat__transition-group', TransitionGroup) app.component('__compat__keep-alive', KeepAlive) // built-in directives. No need for prefix since there's no render fn API // for resolving directives via string in v3. // v-show 实现 app._context.directives.show = vShow // v-model 实现 app._context.directives.model = vModelDynamic } return app } export function createCompatVue() { // 旧得全局构造函数???? const Vue = compatUtils.createCompatVue(createApp, wrappedCreateApp) // 把所有runtimeDom里面的属性方法放到Vue里面 extend(Vue, runtimeDom) return Vue }