From 0ed9b813b5ca4baf4caf08c1ca5a43523509bef6 Mon Sep 17 00:00:00 2001 From: Ben McCann <322311+benmccann@users.noreply.github.com> Date: Wed, 20 Jul 2022 20:35:58 -0700 Subject: [PATCH 1/4] set Vite's publicDir option --- .changeset/modern-jars-return.md | 6 ++++++ packages/adapter-node/index.js | 1 - packages/kit/src/core/adapt/builder.js | 5 +---- packages/kit/src/core/adapt/builder.spec.js | 8 +------- packages/kit/src/vite/build/utils.js | 4 +--- packages/kit/src/vite/dev/index.js | 5 ++++- packages/kit/src/vite/index.js | 1 + packages/kit/src/vite/preview/index.js | 4 ++-- 8 files changed, 16 insertions(+), 18 deletions(-) create mode 100644 .changeset/modern-jars-return.md diff --git a/.changeset/modern-jars-return.md b/.changeset/modern-jars-return.md new file mode 100644 index 000000000000..26f63cc95049 --- /dev/null +++ b/.changeset/modern-jars-return.md @@ -0,0 +1,6 @@ +--- +'@sveltejs/adapter-node': patch +'@sveltejs/kit': patch +--- + +set Vite's `publicDir` option diff --git a/packages/adapter-node/index.js b/packages/adapter-node/index.js index ec1d53eeccfe..4dbd7d1bd9ad 100644 --- a/packages/adapter-node/index.js +++ b/packages/adapter-node/index.js @@ -50,7 +50,6 @@ export default function (opts = {}) { if (precompress) { builder.log.minor('Compressing assets'); await compress(`${out}/client`); - await compress(`${out}/static`); await compress(`${out}/prerendered`); } } diff --git a/packages/kit/src/core/adapt/builder.js b/packages/kit/src/core/adapt/builder.js index b2e52c86aebc..d0b5dad7ffdb 100644 --- a/packages/kit/src/core/adapt/builder.js +++ b/packages/kit/src/core/adapt/builder.js @@ -122,10 +122,7 @@ export function create_builder({ config, build_data, prerendered, log }) { }, writeClient(dest) { - return [ - ...copy(`${config.kit.outDir}/output/client`, dest), - ...copy(config.kit.files.assets, dest) - ]; + return [...copy(`${config.kit.outDir}/output/client`, dest)]; }, writePrerendered(dest, { fallback } = {}) { diff --git a/packages/kit/src/core/adapt/builder.spec.js b/packages/kit/src/core/adapt/builder.spec.js index 0af84ddec6c5..2f2c82f4a78f 100644 --- a/packages/kit/src/core/adapt/builder.spec.js +++ b/packages/kit/src/core/adapt/builder.spec.js @@ -43,13 +43,7 @@ test('copy files', () => { builder.writeClient(dest); assert.equal( - [ - ...glob('**', { - cwd: /** @type {import('types').ValidatedConfig} */ (mocked).kit.files.assets, - dot: true - }), - ...glob('**', { cwd: `${outDir}/output/client`, dot: true }) - ], + glob('**', { cwd: `${outDir}/output/client`, dot: true }), glob('**', { cwd: dest, dot: true }) ); diff --git a/packages/kit/src/vite/build/utils.js b/packages/kit/src/vite/build/utils.js index 7d6e8f44018a..614a07b79a40 100644 --- a/packages/kit/src/vite/build/utils.js +++ b/packages/kit/src/vite/build/utils.js @@ -117,9 +117,7 @@ export const get_default_config = function ({ config, input, ssr, outDir }) { __SVELTEKIT_APP_VERSION_POLL_INTERVAL__: JSON.stringify(config.kit.version.pollInterval), __SVELTEKIT_DEV__: 'false' }, - // prevent Vite copying the contents of `config.kit.files.assets`, - // if it happens to be 'public' instead of 'static' - publicDir: false, + publicDir: ssr ? false : config.kit.files.assets, resolve: { alias: get_aliases(config.kit) }, diff --git a/packages/kit/src/vite/dev/index.js b/packages/kit/src/vite/dev/index.js index b118afc23070..f79564c4f866 100644 --- a/packages/kit/src/vite/dev/index.js +++ b/packages/kit/src/vite/dev/index.js @@ -198,6 +198,7 @@ export async function dev(vite, vite_config, svelte_config) { const decoded = decodeURI(new URL(base + req.url).pathname); + let wrong_case = false; if (decoded.startsWith(assets)) { const pathname = decoded.slice(assets.length); const file = svelte_config.kit.files.assets + pathname; @@ -207,6 +208,8 @@ export async function dev(vite, vite_config, svelte_config) { req.url = encodeURI(pathname); // don't need query/hash asset_server(req, res); return; + } else { + wrong_case = true; } } } @@ -217,7 +220,7 @@ export async function dev(vite, vite_config, svelte_config) { !vite_config.server.fs.strict || vite_config.server.fs.allow.some((dir) => file.startsWith(dir)); - if (is_file && allowed) { + if (is_file && allowed && !wrong_case) { // @ts-expect-error serve_static_middleware.handle(req, res); return; diff --git a/packages/kit/src/vite/index.js b/packages/kit/src/vite/index.js index c170cc9984f0..99023165f7f5 100644 --- a/packages/kit/src/vite/index.js +++ b/packages/kit/src/vite/index.js @@ -209,6 +209,7 @@ function kit() { __SVELTEKIT_DEV__: 'true', __SVELTEKIT_APP_VERSION_POLL_INTERVAL__: '0' }, + publicDir: svelte_config.kit.files.assets, resolve: { alias: get_aliases(svelte_config.kit) }, diff --git a/packages/kit/src/vite/preview/index.js b/packages/kit/src/vite/preview/index.js index 078e6146ed3a..42be6a2e5a01 100644 --- a/packages/kit/src/vite/preview/index.js +++ b/packages/kit/src/vite/preview/index.js @@ -47,13 +47,13 @@ export async function preview(vite, config, protocol) { // files in `static` vite.middlewares.use(scoped(assets, mutable(config.kit.files.assets))); - // immutable generated client assets + // generated client assets vite.middlewares.use( scoped( assets, sirv(join(config.kit.outDir, 'output/client'), { setHeaders: (res, pathname) => { - // only apply to build directory, not e.g. version.json + // only apply to immutable directory, not e.g. version.json if (pathname.startsWith(`/${config.kit.appDir}/immutable`)) { res.setHeader('cache-control', 'public,max-age=31536000,immutable'); } From f85d5ce51950c532265b5d1f30007a73fb54a904 Mon Sep 17 00:00:00 2001 From: Ben McCann <322311+benmccann@users.noreply.github.com> Date: Wed, 20 Jul 2022 21:04:21 -0700 Subject: [PATCH 2/4] see if this works on mac and windows --- packages/kit/src/vite/dev/index.js | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/packages/kit/src/vite/dev/index.js b/packages/kit/src/vite/dev/index.js index f79564c4f866..64aa55a0e112 100644 --- a/packages/kit/src/vite/dev/index.js +++ b/packages/kit/src/vite/dev/index.js @@ -186,7 +186,7 @@ export async function dev(vite, vite_config, svelte_config) { /** @type {function} */ (middleware.handle).name === 'viteServeStaticMiddleware' ); - remove_html_middlewares(vite.middlewares); + remove_static_middlewares(vite.middlewares); vite.middlewares.use(async (req, res) => { try { @@ -198,7 +198,6 @@ export async function dev(vite, vite_config, svelte_config) { const decoded = decodeURI(new URL(base + req.url).pathname); - let wrong_case = false; if (decoded.startsWith(assets)) { const pathname = decoded.slice(assets.length); const file = svelte_config.kit.files.assets + pathname; @@ -208,8 +207,6 @@ export async function dev(vite, vite_config, svelte_config) { req.url = encodeURI(pathname); // don't need query/hash asset_server(req, res); return; - } else { - wrong_case = true; } } } @@ -220,7 +217,7 @@ export async function dev(vite, vite_config, svelte_config) { !vite_config.server.fs.strict || vite_config.server.fs.allow.some((dir) => file.startsWith(dir)); - if (is_file && allowed && !wrong_case) { + if (is_file && allowed) { // @ts-expect-error serve_static_middleware.handle(req, res); return; @@ -395,11 +392,15 @@ function not_found(res, message = 'Not found') { /** * @param {import('connect').Server} server */ -function remove_html_middlewares(server) { - const html_middlewares = ['viteServeStaticMiddleware']; +function remove_static_middlewares(server) { + // We don't use viteServePublicMiddleware because of the following issues: + // https://github.com/vitejs/vite/issues/9260 + // https://github.com/vitejs/vite/issues/9236 + // https://github.com/vitejs/vite/issues/9234 + const static_middlewares = ['viteServePublicMiddleware', 'viteServeStaticMiddleware']; for (let i = server.stack.length - 1; i > 0; i--) { - // @ts-expect-error using internals until https://github.com/vitejs/vite/pull/4640 is merged - if (html_middlewares.includes(server.stack[i].handle.name)) { + // @ts-expect-error using internals + if (static_middlewares.includes(server.stack[i].handle.name)) { server.stack.splice(i, 1); } } From 9e6e747617537335fc6ba6385d5a6040073d6ce0 Mon Sep 17 00:00:00 2001 From: Ben McCann <322311+benmccann@users.noreply.github.com> Date: Thu, 21 Jul 2022 08:39:41 -0700 Subject: [PATCH 3/4] Update packages/kit/src/vite/preview/index.js Co-authored-by: Rich Harris --- packages/kit/src/vite/preview/index.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/kit/src/vite/preview/index.js b/packages/kit/src/vite/preview/index.js index 42be6a2e5a01..5f11b78855be 100644 --- a/packages/kit/src/vite/preview/index.js +++ b/packages/kit/src/vite/preview/index.js @@ -47,7 +47,7 @@ export async function preview(vite, config, protocol) { // files in `static` vite.middlewares.use(scoped(assets, mutable(config.kit.files.assets))); - // generated client assets + // generated client assets and the contents of `static` vite.middlewares.use( scoped( assets, From d63510b8b186f120375fb9788868288301467fe5 Mon Sep 17 00:00:00 2001 From: Ben McCann <322311+benmccann@users.noreply.github.com> Date: Thu, 21 Jul 2022 08:39:52 -0700 Subject: [PATCH 4/4] Update packages/kit/src/vite/preview/index.js Co-authored-by: Rich Harris --- packages/kit/src/vite/preview/index.js | 3 --- 1 file changed, 3 deletions(-) diff --git a/packages/kit/src/vite/preview/index.js b/packages/kit/src/vite/preview/index.js index 5f11b78855be..262eb48c9c24 100644 --- a/packages/kit/src/vite/preview/index.js +++ b/packages/kit/src/vite/preview/index.js @@ -44,9 +44,6 @@ export async function preview(vite, config, protocol) { const server = new Server(manifest); return () => { - // files in `static` - vite.middlewares.use(scoped(assets, mutable(config.kit.files.assets))); - // generated client assets and the contents of `static` vite.middlewares.use( scoped(