feat(apiApp): add more warnings (#394)

This commit is contained in:
Dmitry Sharshakov 2019-10-28 23:22:03 +03:00 committed by Evan You
parent 36b7e4e52e
commit 5cce23f4c6
2 changed files with 45 additions and 1 deletions

View File

@ -81,6 +81,11 @@ describe('api: createApp', () => {
app.component('BarBaz', () => 'barbaz!')
app.component('BarBaz', () => 'barbaz!')
expect(
'Component "BarBaz" has already been registered in target app.'
).toHaveBeenWarnedTimes(1)
const Root = {
// local override
components: {
@ -117,6 +122,13 @@ describe('api: createApp', () => {
mounted: spy2
})
app.directive('BarBaz', {
mounted: spy2
})
expect(
'Directive "BarBaz" has already been registered in target app.'
).toHaveBeenWarnedTimes(1)
const Root = {
// local override
directives: {
@ -164,6 +176,7 @@ describe('api: createApp', () => {
}
}
const mixinB = {
name: 'mixinB',
data() {
return {
b: 2
@ -203,6 +216,15 @@ describe('api: createApp', () => {
app.mixin(mixinA)
app.mixin(mixinB)
app.mixin(mixinA)
app.mixin(mixinB)
expect(
'Mixin has already been applied to target app'
).toHaveBeenWarnedTimes(2)
expect(
'Mixin has already been applied to target app: mixinB'
).toHaveBeenWarnedTimes(1)
const root = nodeOps.createElement('div')
app.mount(Comp, root)

View File

@ -110,7 +110,19 @@ export function createAppAPI<HostNode, HostElement>(
},
mixin(mixin: ComponentOptions) {
if (__DEV__ && !__FEATURE_OPTIONS__) {
warn('Mixins are only available in builds supporting Options API')
}
if (!context.mixins.includes(mixin)) {
context.mixins.push(mixin)
} else if (__DEV__) {
warn(
'Mixin has already been applied to target app' +
(mixin.name ? `: ${mixin.name}` : '')
)
}
return app
},
@ -121,6 +133,11 @@ export function createAppAPI<HostNode, HostElement>(
if (!component) {
return context.components[name]
} else {
if (__DEV__ && context.components[name]) {
warn(
`Component "${name}" has already been registered in target app.`
)
}
context.components[name] = component
return app
}
@ -134,6 +151,11 @@ export function createAppAPI<HostNode, HostElement>(
if (!directive) {
return context.directives[name] as any
} else {
if (__DEV__ && context.directives[name]) {
warn(
`Directive "${name}" has already been registered in target app.`
)
}
context.directives[name] = directive
return app
}