From 3b2958ae3c2fed21a963fb84f8fd679676f5e407 Mon Sep 17 00:00:00 2001 From: Anthony Fu Date: Fri, 22 Jul 2022 13:05:52 +0800 Subject: [PATCH 1/3] fix(components): auto import for external template --- packages/nuxt/src/components/loader.ts | 20 ++++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) diff --git a/packages/nuxt/src/components/loader.ts b/packages/nuxt/src/components/loader.ts index acda7f7fdc3..70925e14f36 100644 --- a/packages/nuxt/src/components/loader.ts +++ b/packages/nuxt/src/components/loader.ts @@ -13,6 +13,19 @@ interface LoaderOptions { transform?: ComponentsOptions['transform'] } +function isVueTemplate (id: string) { + // Bare `.vue` file (in Vite) + if (id.endsWith('.vue')) { + return true + } + + const { search } = parseURL(decodeURIComponent(pathToFileURL(id).href)) + const query = parseQuery(search) + + // Query `?vue&type=template` (in Webpack or external template) + return 'vue' in query && query.type === 'template' +} + export const loaderPlugin = createUnplugin((options: LoaderOptions) => { const exclude = options.transform?.exclude || [] const include = options.transform?.include || [] @@ -27,12 +40,7 @@ export const loaderPlugin = createUnplugin((options: LoaderOptions) => { if (include.some(pattern => id.match(pattern))) { return true } - - const { pathname, search } = parseURL(decodeURIComponent(pathToFileURL(id).href)) - const query = parseQuery(search) - // we only transform render functions - // from `type=template` (in Webpack) and bare `.vue` file (in Vite) - return pathname.endsWith('.vue') && (query.type === 'template' || !!query.macro || !search) + return isVueTemplate(id) }, transform (code, id) { const components = options.getComponents() From e56924731baeb0d1da7cfb9108f3f9cbd269d451 Mon Sep 17 00:00:00 2001 From: Anthony Fu Date: Fri, 22 Jul 2022 13:07:58 +0800 Subject: [PATCH 2/3] fix(auto-import): auto import for external template --- packages/nuxt/src/auto-imports/transform.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/nuxt/src/auto-imports/transform.ts b/packages/nuxt/src/auto-imports/transform.ts index fb5427c4fdc..01aada5bb4a 100644 --- a/packages/nuxt/src/auto-imports/transform.ts +++ b/packages/nuxt/src/auto-imports/transform.ts @@ -10,7 +10,7 @@ export const TransformPlugin = createUnplugin(({ ctx, options, sourcemap }: {ctx enforce: 'post', transformInclude (id) { const { pathname, search } = parseURL(decodeURIComponent(pathToFileURL(id).href)) - const { type, macro } = parseQuery(search) + const query = parseQuery(search) const exclude = options.transform?.exclude || [/[\\/]node_modules[\\/]/] const include = options.transform?.include || [] @@ -22,8 +22,8 @@ export const TransformPlugin = createUnplugin(({ ctx, options, sourcemap }: {ctx // vue files if ( - pathname.endsWith('.vue') && - (type === 'template' || type === 'script' || macro || !search) + id.endsWith('.vue') || + ('vue' in query && (query.type === 'template' || query.type === 'script' || query.macro)) ) { return true } From a391261383b1985a91390ee0b2b4c608329cb20e Mon Sep 17 00:00:00 2001 From: Anthony Fu Date: Fri, 22 Jul 2022 13:37:34 +0800 Subject: [PATCH 3/3] chore: update --- packages/nuxt/src/auto-imports/transform.ts | 3 ++- packages/nuxt/src/components/loader.ts | 16 +++++++++++++++- 2 files changed, 17 insertions(+), 2 deletions(-) diff --git a/packages/nuxt/src/auto-imports/transform.ts b/packages/nuxt/src/auto-imports/transform.ts index 6b20efede72..36ae55101ba 100644 --- a/packages/nuxt/src/auto-imports/transform.ts +++ b/packages/nuxt/src/auto-imports/transform.ts @@ -25,7 +25,8 @@ export const TransformPlugin = createUnplugin(({ ctx, options, sourcemap }: {ctx // Vue files if ( id.endsWith('.vue') || - ('vue' in query && (query.type === 'template' || query.type === 'script' || query.macro)) + 'macro' in query || + ('vue' in query && (query.type === 'template' || query.type === 'script' || 'setup' in query)) ) { return true } diff --git a/packages/nuxt/src/components/loader.ts b/packages/nuxt/src/components/loader.ts index d470b2da4db..66450ab0709 100644 --- a/packages/nuxt/src/components/loader.ts +++ b/packages/nuxt/src/components/loader.ts @@ -20,10 +20,24 @@ function isVueTemplate (id: string) { } const { search } = parseURL(decodeURIComponent(pathToFileURL(id).href)) + if (!search) { + return false + } + const query = parseQuery(search) + // Macro + if (query.macro) { + return true + } + + // Non-Vue or Styles + if (!('vue' in query) || query.type === 'style') { + return false + } + // Query `?vue&type=template` (in Webpack or external template) - return 'vue' in query && (query.type === 'template' || 'setup' in query || 'macro' in query) + return true } export const loaderPlugin = createUnplugin((options: LoaderOptions) => {