From 09ec709f6c33c843a404823d63a78785b10055ec Mon Sep 17 00:00:00 2001 From: Tee Ming Date: Thu, 27 Jul 2023 22:38:31 +0800 Subject: [PATCH 1/6] disable vite module preload --- packages/kit/src/exports/vite/index.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/packages/kit/src/exports/vite/index.js b/packages/kit/src/exports/vite/index.js index bd5bb27f61db..e8ecc188fb10 100644 --- a/packages/kit/src/exports/vite/index.js +++ b/packages/kit/src/exports/vite/index.js @@ -711,7 +711,8 @@ function kit({ svelte_config }) { build: { minify: initial_config.build?.minify, assetsInlineLimit: vite_config.build.assetsInlineLimit, - sourcemap: vite_config.build.sourcemap + sourcemap: vite_config.build.sourcemap, + modulePreload: false }, optimizeDeps: { force: vite_config.optimizeDeps.force From 357dfbabff9f6de1b60a165127c96d4393e1fbea Mon Sep 17 00:00:00 2001 From: Tee Ming Date: Thu, 27 Jul 2023 22:55:08 +0800 Subject: [PATCH 2/6] changeset --- .changeset/funny-items-deny.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 .changeset/funny-items-deny.md diff --git a/.changeset/funny-items-deny.md b/.changeset/funny-items-deny.md new file mode 100644 index 000000000000..fe263bd9f0ef --- /dev/null +++ b/.changeset/funny-items-deny.md @@ -0,0 +1,5 @@ +--- +'@sveltejs/kit': patch +--- + +fix: prevent duplicate module preload From 44452060dc2ccf4dc3b22c083973990482cf21bf Mon Sep 17 00:00:00 2001 From: Tee Ming Date: Fri, 28 Jul 2023 01:26:34 +0800 Subject: [PATCH 3/6] only disable js module preloads --- packages/kit/src/exports/vite/index.js | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/packages/kit/src/exports/vite/index.js b/packages/kit/src/exports/vite/index.js index e8ecc188fb10..79f5c76bef4b 100644 --- a/packages/kit/src/exports/vite/index.js +++ b/packages/kit/src/exports/vite/index.js @@ -712,7 +712,12 @@ function kit({ svelte_config }) { minify: initial_config.build?.minify, assetsInlineLimit: vite_config.build.assetsInlineLimit, sourcemap: vite_config.build.sourcemap, - modulePreload: false + modulePreload: { + // disable Vite's JS module preload + resolveDependencies: () => { + return []; + } + } }, optimizeDeps: { force: vite_config.optimizeDeps.force From 448cc5d59b3d4030f2dd9d70c2933acf45e52d82 Mon Sep 17 00:00:00 2001 From: Tee Ming Date: Fri, 28 Jul 2023 03:21:24 +0800 Subject: [PATCH 4/6] move to enforced config --- packages/kit/src/exports/vite/index.js | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/packages/kit/src/exports/vite/index.js b/packages/kit/src/exports/vite/index.js index 79f5c76bef4b..bb7b43340d16 100644 --- a/packages/kit/src/exports/vite/index.js +++ b/packages/kit/src/exports/vite/index.js @@ -43,6 +43,7 @@ const enforced_config = { formats: true }, manifest: true, + modulePreload: true, outDir: true, rollupOptions: { input: true, @@ -555,6 +556,10 @@ function kit({ svelte_config }) { cssMinify: initial_config.build?.minify == null ? true : !!initial_config.build.minify, // don't use the default name to avoid collisions with 'static/manifest.json' manifest: 'vite-manifest.json', + modulePreload: { + // disable Vite's JS module preload + resolveDependencies: () => [] + }, outDir: `${out}/${ssr ? 'server' : 'client'}`, rollupOptions: { input, @@ -711,13 +716,7 @@ function kit({ svelte_config }) { build: { minify: initial_config.build?.minify, assetsInlineLimit: vite_config.build.assetsInlineLimit, - sourcemap: vite_config.build.sourcemap, - modulePreload: { - // disable Vite's JS module preload - resolveDependencies: () => { - return []; - } - } + sourcemap: vite_config.build.sourcemap }, optimizeDeps: { force: vite_config.optimizeDeps.force From 09f8ad8cc1b13c1c8cd5bf6367d0a46cd38717ff Mon Sep 17 00:00:00 2001 From: Tee Ming Date: Fri, 28 Jul 2023 21:49:40 +0800 Subject: [PATCH 5/6] add test --- .../kit/test/apps/basics/test/client.test.js | 24 +++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/packages/kit/test/apps/basics/test/client.test.js b/packages/kit/test/apps/basics/test/client.test.js index ce3be3bf6b27..74e90d760616 100644 --- a/packages/kit/test/apps/basics/test/client.test.js +++ b/packages/kit/test/apps/basics/test/client.test.js @@ -802,3 +802,27 @@ test.describe('Actions', () => { await expect(pre).toHaveText('prop: 1, store: 1'); }); }); + +test.describe('Assets', () => { + test('only one link per stylesheet', async ({ page }) => { + if (process.env.DEV) return; + + await page.goto('/'); + + expect( + await page.evaluate(() => { + const links = Array.from(document.head.querySelectorAll('link[rel=stylesheet]')); + + for (let i = 0; i < links.length; ) { + const link = links.shift(); + const asset_name = link.href.split('/').at(-1); + if (links.some((link) => link.href.includes(asset_name))) { + return false; + } + } + + return true; + }) + ).toBe(true); + }); +}); From cd55ab351933098f5bcf6bdc029d5eb3380f6302 Mon Sep 17 00:00:00 2001 From: Tee Ming Date: Fri, 28 Jul 2023 21:54:40 +0800 Subject: [PATCH 6/6] match page render relative config check --- packages/kit/src/exports/vite/index.js | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/packages/kit/src/exports/vite/index.js b/packages/kit/src/exports/vite/index.js index bb7b43340d16..01625bdfe5bf 100644 --- a/packages/kit/src/exports/vite/index.js +++ b/packages/kit/src/exports/vite/index.js @@ -43,7 +43,6 @@ const enforced_config = { formats: true }, manifest: true, - modulePreload: true, outDir: true, rollupOptions: { input: true, @@ -546,7 +545,8 @@ function kit({ svelte_config }) { // E.g. Vite generates `new URL('/asset.png', import.meta).href` for a relative path vs just '/asset.png'. // That's larger and takes longer to run and also causes an HTML diff between SSR and client // causing us to do a more expensive hydration check. - const client_base = kit.paths.relative || kit.paths.assets ? './' : kit.paths.base || '/'; + const client_base = + kit.paths.relative !== false || kit.paths.assets ? './' : kit.paths.base || '/'; new_config = { base: ssr ? assets_base(kit) : client_base, @@ -556,10 +556,6 @@ function kit({ svelte_config }) { cssMinify: initial_config.build?.minify == null ? true : !!initial_config.build.minify, // don't use the default name to avoid collisions with 'static/manifest.json' manifest: 'vite-manifest.json', - modulePreload: { - // disable Vite's JS module preload - resolveDependencies: () => [] - }, outDir: `${out}/${ssr ? 'server' : 'client'}`, rollupOptions: { input,