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..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 { @@ -392,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); } } 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..262eb48c9c24 100644 --- a/packages/kit/src/vite/preview/index.js +++ b/packages/kit/src/vite/preview/index.js @@ -44,16 +44,13 @@ 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))); - - // immutable generated client assets + // generated client assets and the contents of `static` 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'); }