fix(compat): fix app-level asset registration affecting other local apps (#5979)
This commit is contained in:
parent
7fbc933f4d
commit
7fb57327b9
@ -381,9 +381,10 @@ function installLegacyAPIs(app: App) {
|
|||||||
|
|
||||||
function applySingletonAppMutations(app: App) {
|
function applySingletonAppMutations(app: App) {
|
||||||
// copy over asset registries and deopt flag
|
// copy over asset registries and deopt flag
|
||||||
;['mixins', 'components', 'directives', 'filters', 'deopt'].forEach(key => {
|
app._context.mixins = [...singletonApp._context.mixins]
|
||||||
|
;['components', 'directives', 'filters'].forEach(key => {
|
||||||
// @ts-ignore
|
// @ts-ignore
|
||||||
app._context[key] = singletonApp._context[key]
|
app._context[key] = Object.create(singletonApp._context[key])
|
||||||
})
|
})
|
||||||
|
|
||||||
// copy over global config mutations
|
// copy over global config mutations
|
||||||
|
@ -448,3 +448,25 @@ test('global asset registration should affect apps created via createApp', () =>
|
|||||||
expect(vm.$el.textContent).toBe('foo')
|
expect(vm.$el.textContent).toBe('foo')
|
||||||
delete singletonApp._context.components.foo
|
delete singletonApp._context.components.foo
|
||||||
})
|
})
|
||||||
|
|
||||||
|
test('post-facto global asset registration should affect apps created via createApp', () => {
|
||||||
|
const app = createApp({
|
||||||
|
template: '<foo/>'
|
||||||
|
})
|
||||||
|
Vue.component('foo', { template: 'foo' })
|
||||||
|
const vm = app.mount(document.createElement('div')) as any;
|
||||||
|
expect(vm.$el.textContent).toBe('foo')
|
||||||
|
delete singletonApp._context.components.foo
|
||||||
|
})
|
||||||
|
|
||||||
|
test('local asset registration should not affect other local apps', () => {
|
||||||
|
const app1 = createApp({});
|
||||||
|
const app2 = createApp({});
|
||||||
|
|
||||||
|
app1.component('foo', {});
|
||||||
|
app2.component('foo', {});
|
||||||
|
|
||||||
|
expect(
|
||||||
|
`Component "foo" has already been registered in target app`
|
||||||
|
).not.toHaveBeenWarned()
|
||||||
|
})
|
Loading…
Reference in New Issue
Block a user