feat(bridge, nuxt3): mock vue-demi (#1849)

Co-authored-by: Pooya Parsa <pyapar@gmail.com>
This commit is contained in:
Anthony Fu 2021-11-15 18:25:50 +08:00 committed by GitHub
parent 73f9cd2f94
commit f298386795
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
13 changed files with 62 additions and 6 deletions

View File

@ -27,6 +27,8 @@ export function setupAppBridge (_options: any) {
'@vue/reactivity', '@vue/reactivity',
'@vue/runtime-core', '@vue/runtime-core',
'@vue/runtime-dom', '@vue/runtime-dom',
// vue-demi
'vue-demi',
...[ ...[
// vue 2 dist files // vue 2 dist files
'vue/dist/vue.common.dev', 'vue/dist/vue.common.dev',

View File

@ -4,6 +4,9 @@ import type { Vue } from 'vue/types/vue'
import type { ComponentOptions } from 'vue' import type { ComponentOptions } from 'vue'
import { defineComponent, getCurrentInstance } from './composables' import { defineComponent, getCurrentInstance } from './composables'
export const isVue2 = true
export const isVue3 = false
export const defineNuxtComponent = defineComponent export const defineNuxtComponent = defineComponent
export interface RuntimeNuxtHooks { } export interface RuntimeNuxtHooks { }

View File

@ -1,7 +1,14 @@
import Vue from 'vue2' import Vue from 'vue2'
export { EffectScope, computed, createApp, createRef, customRef, defineAsyncComponent, defineComponent, del, effectScope, getCurrentInstance, getCurrentScope, h, inject, isRaw, isReactive, isReadonly, isRef, markRaw, nextTick, onActivated, onBeforeMount, onBeforeUnmount, onBeforeUpdate, onDeactivated, onErrorCaptured, onMounted, onScopeDispose, onServerPrefetch, onUnmounted, onUpdated, provide, proxyRefs, reactive, readonly, ref, set, shallowReactive, shallowReadonly, shallowRef, toRaw, toRef, toRefs, triggerRef, unref, useAttrs, useCSSModule, useCssModule, useSlots, version, warn, watch, watchEffect, watchPostEffect, watchSyncEffect } from '@vue/composition-api' export { EffectScope, computed, createApp, createRef, customRef, defineAsyncComponent, defineComponent, del, effectScope, getCurrentInstance, getCurrentScope, h, inject, isRaw, isReactive, isReadonly, isRef, markRaw, nextTick, onActivated, onBeforeMount, onBeforeUnmount, onBeforeUpdate, onDeactivated, onErrorCaptured, onMounted, onScopeDispose, onServerPrefetch, onUnmounted, onUpdated, provide, proxyRefs, reactive, readonly, ref, set, shallowReactive, shallowReadonly, shallowRef, toRaw, toRef, toRefs, triggerRef, unref, useAttrs, useCSSModule, useCssModule, useSlots, warn, watch, watchEffect, watchPostEffect, watchSyncEffect } from '@vue/composition-api'
export const isFunction = fn => fn instanceof Function export const isFunction = fn => fn instanceof Function
export { Vue as default } export { Vue as default }
// mock for vue-demi
export const Vue2 = Vue
export const isVue2 = true
export const isVue3 = false
export const install = () => {}
export const version = Vue.version

View File

@ -51,12 +51,14 @@ async function bundle (nuxt: Nuxt, builder: any) {
css: resolveCSSOptions(nuxt), css: resolveCSSOptions(nuxt),
optimizeDeps: { optimizeDeps: {
exclude: [ exclude: [
...nuxt.options.build.transpile.filter(i => typeof i === 'string'),
'ufo', 'ufo',
'date-fns', 'date-fns',
'nanoid', 'nanoid',
'vue', 'vue',
'vue2', 'vue2',
'vue2-bridge' 'vue2-bridge',
'vue-demi'
] ]
}, },
esbuild: { esbuild: {

View File

@ -0,0 +1,21 @@
export * from 'vue'
export const install = () => {}
export function set (target, key, val) {
if (Array.isArray(target)) {
target.length = Math.max(target.length, key)
target.splice(key, 1, val)
return val
}
target[key] = val
return val
}
export function del (target, key) {
if (Array.isArray(target)) {
target.splice(key, 1)
return
}
delete target[key]
}

View File

@ -2,7 +2,7 @@ import type { IncomingMessage, ServerResponse } from 'http'
import type { App } from 'vue' import type { App } from 'vue'
import type { Component } from '@vue/runtime-core' import type { Component } from '@vue/runtime-core'
import mockContext from 'unenv/runtime/mock/proxy' import mockContext from 'unenv/runtime/mock/proxy'
import { NuxtApp, useRuntimeConfig } from './nuxt' import { NuxtApp, useRuntimeConfig } from '../nuxt'
type Route = any type Route = any
type Store = any type Store = any

View File

@ -0,0 +1,5 @@
export * from './capi'
export const Vue2 = undefined
export const isVue2 = false
export const isVue3 = true

View File

@ -2,7 +2,7 @@ import { toRefs } from '@vue/reactivity'
import { defineComponent, getCurrentInstance } from 'vue' import { defineComponent, getCurrentInstance } from 'vue'
import type { DefineComponent } from 'vue' import type { DefineComponent } from 'vue'
import { useRoute } from 'vue-router' import { useRoute } from 'vue-router'
import type { LegacyContext } from '../legacy' import type { LegacyContext } from '../compat/legacy-app'
import { useNuxtApp } from '../nuxt' import { useNuxtApp } from '../nuxt'
import { useAsyncData } from './asyncData' import { useAsyncData } from './asyncData'

View File

@ -1,2 +1,5 @@
export * from './nuxt' export * from './nuxt'
export * from './composables' export * from './composables'
export const isVue2 = false
export const isVue3 = true

View File

@ -3,7 +3,7 @@ import { getCurrentInstance, reactive } from 'vue'
import type { App, VNode } from 'vue' import type { App, VNode } from 'vue'
import { createHooks, Hookable } from 'hookable' import { createHooks, Hookable } from 'hookable'
import type { RuntimeConfig } from '@nuxt/kit' import type { RuntimeConfig } from '@nuxt/kit'
import { legacyPlugin, LegacyContext } from './legacy' import { legacyPlugin, LegacyContext } from './compat/legacy-app'
type NuxtMeta = { type NuxtMeta = {
htmlAttrs?: string htmlAttrs?: string

View File

@ -29,6 +29,14 @@ export const Nuxt3AutoImports: AutoImportSource[] = [
'useRouter' 'useRouter'
] ]
}, },
// vue-demi (mocked)
{
from: 'vue-demi',
names: [
'isVue2',
'isVue3'
]
},
// vue // vue
{ {
from: 'vue', from: 'vue',

View File

@ -77,6 +77,8 @@ export async function loadNuxt (opts: LoadNuxtOptions): Promise<Nuxt> {
options._majorVersion = 3 options._majorVersion = 3
options.buildModules.push(pagesModule, metaModule, componentsModule, autoImportsModule) options.buildModules.push(pagesModule, metaModule, componentsModule, autoImportsModule)
options.modulesDir.push(resolve(pkgDir, 'node_modules')) options.modulesDir.push(resolve(pkgDir, 'node_modules'))
options.alias['vue-demi'] = resolve(options.appDir, 'compat/vue-demi')
options.alias['@vue/composition-api'] = resolve(options.appDir, 'compat/capi')
const nuxt = createNuxt(options) const nuxt = createNuxt(options)

View File

@ -56,7 +56,10 @@ export async function bundle (nuxt: Nuxt) {
}, },
css: resolveCSSOptions(nuxt), css: resolveCSSOptions(nuxt),
optimizeDeps: { optimizeDeps: {
exclude: [], exclude: [
...nuxt.options.build.transpile.filter(i => typeof i === 'string'),
'vue-demi'
],
entries: [ entries: [
resolve(nuxt.options.appDir, 'entry.ts') resolve(nuxt.options.appDir, 'entry.ts')
] ]