From 0f69fb2dbc9c5997db9bd0d4fdfbc0abd7565788 Mon Sep 17 00:00:00 2001 From: btea <2356281422@qq.com> Date: Mon, 16 Dec 2024 14:15:28 +0800 Subject: [PATCH 1/4] fix: use href carry no-inline query --- packages/plugin-vue/src/template.ts | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/packages/plugin-vue/src/template.ts b/packages/plugin-vue/src/template.ts index 76034c2c..04e27ac7 100644 --- a/packages/plugin-vue/src/template.ts +++ b/packages/plugin-vue/src/template.ts @@ -77,6 +77,20 @@ export function transformTemplateInMain( } } +function carryQueryWithSvgUse(code: string, result: SFCTemplateCompileResults) { + const reg = /() + while ((match = reg.exec(code))) { + if (!match[1].includes('?')) { + hrefs.add(match[1].split('#')[0]) + } + } + hrefs.forEach((href) => { + result.code = result.code.replace(href, `${href}?no-inline`) + }) +} + // eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types export function compile( code: string, @@ -93,6 +107,8 @@ export function compile( source: code, }) + carryQueryWithSvgUse(code, result) + if (result.errors.length) { result.errors.forEach((error) => pluginContext.error( @@ -184,7 +200,6 @@ export function resolveTemplateCompilerOptions( if (lang && /tsx?$/.test(lang) && !expressionPlugins.includes('typescript')) { expressionPlugins.push('typescript') } - return { ...options.template, id, From 18bbee4bf1ea0bccc5409e71fa4411e81e92251d Mon Sep 17 00:00:00 2001 From: btea <2356281422@qq.com> Date: Tue, 17 Dec 2024 09:28:21 +0800 Subject: [PATCH 2/4] fix: update reg --- packages/plugin-vue/src/template.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/plugin-vue/src/template.ts b/packages/plugin-vue/src/template.ts index 04e27ac7..992b42e7 100644 --- a/packages/plugin-vue/src/template.ts +++ b/packages/plugin-vue/src/template.ts @@ -78,12 +78,12 @@ export function transformTemplateInMain( } function carryQueryWithSvgUse(code: string, result: SFCTemplateCompileResults) { - const reg = /() while ((match = reg.exec(code))) { - if (!match[1].includes('?')) { - hrefs.add(match[1].split('#')[0]) + if (!match[2].includes('?')) { + hrefs.add(match[2].split('#')[0]) } } hrefs.forEach((href) => { From 8f3f27bf6c65a4e99aad8a9eca1ddee4499e23dd Mon Sep 17 00:00:00 2001 From: btea <2356281422@qq.com> Date: Fri, 20 Dec 2024 11:33:31 +0800 Subject: [PATCH 3/4] fix: update --- packages/plugin-vue/src/index.ts | 19 +++++++++++++++++++ packages/plugin-vue/src/template.ts | 16 ---------------- 2 files changed, 19 insertions(+), 16 deletions(-) diff --git a/packages/plugin-vue/src/index.ts b/packages/plugin-vue/src/index.ts index 183d3ff6..c5da44e6 100644 --- a/packages/plugin-vue/src/index.ts +++ b/packages/plugin-vue/src/index.ts @@ -201,6 +201,24 @@ export default function vuePlugin(rawOptions: Options = {}): Plugin { : createFilter(customElement) }) + function carryQueryWithSvgUse(code: string, id: string) { + if (!id.endsWith('.vue')) { + return code + } + const reg = / { + const [path, hash] = match.split(/#/) + if (!path.endsWith('.svg') || match.includes('?')) { + return match + } + if (hash) { + return `${path}?no-inline#${hash}` + } + return `${path}?no-inline` + }) + return code + } + return { name: 'vite:vue', @@ -344,6 +362,7 @@ export default function vuePlugin(rawOptions: Options = {}): Plugin { }, transform(code, id, opt) { + code = carryQueryWithSvgUse(code, id) const ssr = opt?.ssr === true const { filename, query } = parseVueRequest(id) diff --git a/packages/plugin-vue/src/template.ts b/packages/plugin-vue/src/template.ts index 992b42e7..ec19af4e 100644 --- a/packages/plugin-vue/src/template.ts +++ b/packages/plugin-vue/src/template.ts @@ -77,20 +77,6 @@ export function transformTemplateInMain( } } -function carryQueryWithSvgUse(code: string, result: SFCTemplateCompileResults) { - const reg = /() - while ((match = reg.exec(code))) { - if (!match[2].includes('?')) { - hrefs.add(match[2].split('#')[0]) - } - } - hrefs.forEach((href) => { - result.code = result.code.replace(href, `${href}?no-inline`) - }) -} - // eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types export function compile( code: string, @@ -107,8 +93,6 @@ export function compile( source: code, }) - carryQueryWithSvgUse(code, result) - if (result.errors.length) { result.errors.forEach((error) => pluginContext.error( From e7345e27c1bf2ef9d512e878c629de0ad5ef2b34 Mon Sep 17 00:00:00 2001 From: btea <2356281422@qq.com> Date: Fri, 20 Dec 2024 11:35:53 +0800 Subject: [PATCH 4/4] chore: avoid unnecessary revise --- packages/plugin-vue/src/template.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/plugin-vue/src/template.ts b/packages/plugin-vue/src/template.ts index ec19af4e..76034c2c 100644 --- a/packages/plugin-vue/src/template.ts +++ b/packages/plugin-vue/src/template.ts @@ -184,6 +184,7 @@ export function resolveTemplateCompilerOptions( if (lang && /tsx?$/.test(lang) && !expressionPlugins.includes('typescript')) { expressionPlugins.push('typescript') } + return { ...options.template, id,