diff --git a/.changeset/eleven-ravens-turn.md b/.changeset/eleven-ravens-turn.md new file mode 100644 index 000000000000..0c0315069f61 --- /dev/null +++ b/.changeset/eleven-ravens-turn.md @@ -0,0 +1,5 @@ +--- +'@sveltejs/kit': patch +--- + +fix: avoid trying to inline raw or url css imports diff --git a/packages/kit/src/exports/vite/dev/index.js b/packages/kit/src/exports/vite/dev/index.js index b77c163d9aca..cfa237b0fb73 100644 --- a/packages/kit/src/exports/vite/dev/index.js +++ b/packages/kit/src/exports/vite/dev/index.js @@ -176,20 +176,17 @@ export async function dev(vite, vite_config, svelte_config) { const styles = {}; for (const dep of deps) { - const url = new URL(dep.url, 'http://localhost/'); + const url = new URL(dep.url, 'dummy:/'); const query = url.searchParams; if ( - isCSSRequest(dep.file) || - (query.has('svelte') && query.get('type') === 'style') + (isCSSRequest(dep.file) || + (query.has('svelte') && query.get('type') === 'style')) && + !(query.has('raw') || query.has('url') || query.has('inline')) ) { - // setting `?inline` to load CSS modules as css string - query.set('inline', ''); - try { - const mod = await loud_ssr_load_module( - `${url.pathname}${url.search}${url.hash}` - ); + query.set('inline', ''); + const mod = await vite.ssrLoadModule(`${url.pathname}${url.search}${url.hash}`); styles[dep.url] = mod.default; } catch { // this can happen with dynamically imported modules, I think diff --git a/packages/kit/test/apps/basics/src/routes/css/+page.svelte b/packages/kit/test/apps/basics/src/routes/css/+page.svelte index 45074c38b15c..fca01c864628 100644 --- a/packages/kit/test/apps/basics/src/routes/css/+page.svelte +++ b/packages/kit/test/apps/basics/src/routes/css/+page.svelte @@ -1,18 +1,17 @@ -
- this text is red -
+
this text is red
-
- this text is blue -
+
this text is blue
-
- this text is green -
+
this text is green
+ +
this text is black
other diff --git a/packages/kit/test/apps/basics/src/routes/css/_manual.css b/packages/kit/test/apps/basics/src/routes/css/_manual.css new file mode 100644 index 000000000000..a800732cbe85 --- /dev/null +++ b/packages/kit/test/apps/basics/src/routes/css/_manual.css @@ -0,0 +1,3 @@ +.not { + color: blue; +} diff --git a/packages/kit/test/apps/basics/test/cross-platform/test.js b/packages/kit/test/apps/basics/test/cross-platform/test.js index 1c34b889e302..11f2fb270823 100644 --- a/packages/kit/test/apps/basics/test/cross-platform/test.js +++ b/packages/kit/test/apps/basics/test/cross-platform/test.js @@ -6,29 +6,28 @@ import { test } from '../../../../utils.js'; test.describe.configure({ mode: 'parallel' }); test.describe('CSS', () => { - test('applies imported styles', async ({ page, get_computed_style }) => { + test('applies styles correctly', async ({ page, get_computed_style }) => { await page.goto('/css'); - expect(await get_computed_style('.styled', 'color')).toBe('rgb(255, 0, 0)'); - }); - - test('applies layout styles', async ({ page, get_computed_style }) => { - await page.goto('/css'); - - expect(await get_computed_style('footer', 'color')).toBe('rgb(128, 0, 128)'); - }); + test.step('applies imported styles', async () => { + expect(await get_computed_style('.styled', 'color')).toBe('rgb(255, 0, 0)'); + }); - test('applies local styles', async ({ page, get_computed_style }) => { - await page.goto('/css'); + test.step('applies imported styles in the correct order', async () => { + expect(await get_computed_style('.overridden', 'color')).toBe('rgb(0, 128, 0)'); + }); - expect(await get_computed_style('.also-styled', 'color')).toBe('rgb(0, 0, 255)'); - }); + test.step('applies layout styles', async () => { + expect(await get_computed_style('footer', 'color')).toBe('rgb(128, 0, 128)'); + }); - test('applies imported styles in the correct order', async ({ page, get_computed_style }) => { - await page.goto('/css'); + test.step('applies local styles', async () => { + expect(await get_computed_style('.also-styled', 'color')).toBe('rgb(0, 0, 255)'); + }); - const color = await get_computed_style('.overridden', 'color'); - expect(color).toBe('rgb(0, 128, 0)'); + test.step('does not apply raw and url', async () => { + expect(await get_computed_style('.not', 'color')).toBe('rgb(0, 0, 0)'); + }); }); });