diff --git a/public/app/features/plugins/plugin_loader.ts b/public/app/features/plugins/plugin_loader.ts index 6a415316caf..a5e642ffe06 100644 --- a/public/app/features/plugins/plugin_loader.ts +++ b/public/app/features/plugins/plugin_loader.ts @@ -187,16 +187,21 @@ export function importDataSourcePlugin(meta: DataSourcePluginMeta): Promise = {}; +// Cache for import promises to prevent duplicate imports +const importPromises: Record> = {}; export async function importAppPlugin(meta: PluginMeta): Promise { const pluginId = meta.id; - if (importedAppPlugins[pluginId]) { - return importedAppPlugins[pluginId]; + // We are caching the import promises to prevent duplicate imports + if (importPromises[pluginId] === undefined) { + importPromises[pluginId] = doImportAppPlugin(meta); } + return importPromises[pluginId]; +} + +async function doImportAppPlugin(meta: PluginMeta): Promise { throwIfAngular(meta); const pluginExports = await importPluginModule({ @@ -214,24 +219,22 @@ export async function importAppPlugin(meta: PluginMeta): Promise { plugin.setComponentsFromLegacyExports(pluginExports); exposedComponentsRegistry.register({ - pluginId, + pluginId: meta.id, configs: plugin.exposedComponentConfigs || [], }); addedComponentsRegistry.register({ - pluginId, + pluginId: meta.id, configs: plugin.addedComponentConfigs || [], }); addedLinksRegistry.register({ - pluginId, + pluginId: meta.id, configs: plugin.addedLinkConfigs || [], }); addedFunctionsRegistry.register({ - pluginId, + pluginId: meta.id, configs: plugin.addedFunctionConfigs || [], }); - importedAppPlugins[pluginId] = plugin; - return plugin; }