diff --git a/packages/runtime-core/__tests__/apiApp.spec.ts b/packages/runtime-core/__tests__/apiApp.spec.ts index 417cb772..be76223d 100644 --- a/packages/runtime-core/__tests__/apiApp.spec.ts +++ b/packages/runtime-core/__tests__/apiApp.spec.ts @@ -244,6 +244,7 @@ describe('api: createApp', () => { const PluginB: Plugin = { install: app => app.provide('bar', 2) } + const PluginC: any = undefined const app = createApp() app.use(PluginA) @@ -264,6 +265,12 @@ describe('api: createApp', () => { expect( `Plugin has already been applied to target app` ).toHaveBeenWarnedTimes(1) + + app.use(PluginC) + expect( + `A plugin must either be a function or an object with an "install" ` + + `function.` + ).toHaveBeenWarnedTimes(1) }) test('config.errorHandler', () => { diff --git a/packages/runtime-core/src/apiApp.ts b/packages/runtime-core/src/apiApp.ts index 7b757240..c526e84f 100644 --- a/packages/runtime-core/src/apiApp.ts +++ b/packages/runtime-core/src/apiApp.ts @@ -102,7 +102,7 @@ export function createAppAPI( } else if (isFunction(plugin)) { installedPlugins.add(plugin) plugin(app) - } else if (isFunction(plugin.install)) { + } else if (plugin && isFunction(plugin.install)) { installedPlugins.add(plugin) plugin.install(app) } else if (__DEV__) { @@ -137,15 +137,12 @@ export function createAppAPI( } 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 } + if (__DEV__ && context.components[name]) { + warn(`Component "${name}" has already been registered in target app.`) + } + context.components[name] = component + return app }, directive(name: string, directive?: Directive) { @@ -155,15 +152,12 @@ export function createAppAPI( 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 } + if (__DEV__ && context.directives[name]) { + warn(`Directive "${name}" has already been registered in target app.`) + } + context.directives[name] = directive + return app }, mount(