diff --git a/packages/vite/src/node/plugins/css.ts b/packages/vite/src/node/plugins/css.ts index 892955164a2e09..8abc4ee7f6e0e0 100644 --- a/packages/vite/src/node/plugins/css.ts +++ b/packages/vite/src/node/plugins/css.ts @@ -336,8 +336,10 @@ export function cssPlugin(config: ResolvedConfig): Plugin { return joinUrlSegments(config.base, decodedUrl) } } - const resolved = await resolveUrl(decodedUrl, importer) + const [id, fragment] = decodedUrl.split('#') + let resolved = await resolveUrl(id, importer) if (resolved) { + if (fragment) resolved += '#' + fragment return fileToUrl(resolved, config, this) } if (config.command === 'build') { diff --git a/playground/assets/__tests__/assets.spec.ts b/playground/assets/__tests__/assets.spec.ts index 6f193cc43cd9ca..f6ad1ed750c7f5 100644 --- a/playground/assets/__tests__/assets.spec.ts +++ b/playground/assets/__tests__/assets.spec.ts @@ -358,6 +358,12 @@ describe('svg fragments', () => { : /svg#icon-heart-view$/, ) }) + + test('url with an alias', async () => { + expect(await getBg('.icon-clock-alias')).toMatch( + /\.svg#icon-clock-view"\)$/, + ) + }) }) test('Unknown extension assets import', async () => { diff --git a/playground/assets/css/icons.css b/playground/assets/css/icons.css index 248af58488a385..4ace08e6c2e943 100644 --- a/playground/assets/css/icons.css +++ b/playground/assets/css/icons.css @@ -20,3 +20,7 @@ img { .icon-arrow-right { background: url(../nested/fragment-bg.svg#icon-arrow-right-view) no-repeat; } + +.icon-clock-alias { + background: url('fragment#icon-clock-view') no-repeat; +} diff --git a/playground/assets/index.html b/playground/assets/index.html index 2fd63f46f63960..dbb482229296c7 100644 --- a/playground/assets/index.html +++ b/playground/assets/index.html @@ -213,6 +213,7 @@

SVG Fragments via CSS background url

+

SVG Fragments via JS Import

diff --git a/playground/assets/vite.config.js b/playground/assets/vite.config.js index 94073d7aa70aa4..e0ba18d5e69567 100644 --- a/playground/assets/vite.config.js +++ b/playground/assets/vite.config.js @@ -7,6 +7,7 @@ export default defineConfig({ resolve: { alias: { '@': path.resolve(__dirname, 'nested'), + fragment: path.resolve(__dirname, 'nested/fragment-bg.svg'), }, }, assetsInclude: ['**/*.unknown'],