瀏覽代碼

fix(runtime-core): fix error when passed plugin is undefined (#502)

Gabriel Loiácono 6 年之前
父節點
當前提交
fbcc47841b
共有 2 個文件被更改,包括 18 次插入17 次删除
  1. 7 0
      packages/runtime-core/__tests__/apiApp.spec.ts
  2. 11 17
      packages/runtime-core/src/apiApp.ts

+ 7 - 0
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', () => {

+ 11 - 17
packages/runtime-core/src/apiApp.ts

@@ -102,7 +102,7 @@ export function createAppAPI<HostNode, HostElement>(
         } 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<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
         }
+        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<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
         }
+        if (__DEV__ && context.directives[name]) {
+          warn(`Directive "${name}" has already been registered in target app.`)
+        }
+        context.directives[name] = directive
+        return app
       },
 
       mount(