diff --git a/packages/nuxt/src/components/loader.ts b/packages/nuxt/src/components/loader.ts index 67696bd27d..7c275d2721 100644 --- a/packages/nuxt/src/components/loader.ts +++ b/packages/nuxt/src/components/loader.ts @@ -44,7 +44,9 @@ export const loaderPlugin = createUnplugin((options: LoaderOptions) => { const nuxt = tryUseNuxt() // replace `_resolveComponent("...")` to direct import s.replace(/(?<=[ (])_?resolveComponent\(\s*["'](lazy-|Lazy)?(Idle|Visible|idle-|visible-|Event|event-)?([^'"]*)["'][^)]*\)/g, (full: string, lazy: string, modifier: string, name: string) => { - const component = findComponent(components, name, options.mode) + const normalComponent = findComponent(components, name, options.mode) + const modifierComponent = !normalComponent && modifier ? findComponent(components, modifier + name, options.mode) : null + const component = normalComponent || modifierComponent if (component) { // @ts-expect-error TODO: refactor to nuxi if (component._internal_install && nuxt?.options.test === false) { @@ -73,7 +75,7 @@ export const loaderPlugin = createUnplugin((options: LoaderOptions) => { if (lazy) { imports.add(genImport('vue', [{ name: 'defineAsyncComponent', as: '__defineAsyncComponent' }])) - if (nuxt?.options.experimental.delayedHydration === true && modifier) { + if (modifier && normalComponent && nuxt?.options.experimental.delayedHydration === true) { switch (modifier) { case 'Visible': case 'visible-':