diff --git a/.changeset/modern-jars-return.md b/.changeset/modern-jars-return.md deleted file mode 100644 index 26f63cc95049..000000000000 --- a/.changeset/modern-jars-return.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -'@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 4dbd7d1bd9ad..ec1d53eeccfe 100644 --- a/packages/adapter-node/index.js +++ b/packages/adapter-node/index.js @@ -50,6 +50,7 @@ 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 d54628378bf6..c93e35075389 100644 --- a/packages/kit/src/core/adapt/builder.js +++ b/packages/kit/src/core/adapt/builder.js @@ -122,7 +122,10 @@ export function create_builder({ config, build_data, prerendered, log }) { }, writeClient(dest) { - return [...copy(`${config.kit.outDir}/output/client`, dest)]; + return [ + ...copy(`${config.kit.outDir}/output/client`, dest), + ...copy(config.kit.files.assets, 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 2f2c82f4a78f..0af84ddec6c5 100644 --- a/packages/kit/src/core/adapt/builder.spec.js +++ b/packages/kit/src/core/adapt/builder.spec.js @@ -43,7 +43,13 @@ test('copy files', () => { builder.writeClient(dest); assert.equal( - glob('**', { cwd: `${outDir}/output/client`, dot: true }), + [ + ...glob('**', { + cwd: /** @type {import('types').ValidatedConfig} */ (mocked).kit.files.assets, + 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 614a07b79a40..7d6e8f44018a 100644 --- a/packages/kit/src/vite/build/utils.js +++ b/packages/kit/src/vite/build/utils.js @@ -117,7 +117,9 @@ export const get_default_config = function ({ config, input, ssr, outDir }) { __SVELTEKIT_APP_VERSION_POLL_INTERVAL__: JSON.stringify(config.kit.version.pollInterval), __SVELTEKIT_DEV__: 'false' }, - publicDir: ssr ? false : config.kit.files.assets, + // prevent Vite copying the contents of `config.kit.files.assets`, + // if it happens to be 'public' instead of 'static' + publicDir: false, 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 4a90a5dbfb11..c042c0f16f42 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_static_middlewares(vite.middlewares); + remove_html_middlewares(vite.middlewares); vite.middlewares.use(async (req, res) => { try { @@ -389,15 +389,11 @@ function not_found(res, message = 'Not found') { /** * @param {import('connect').Server} server */ -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']; +function remove_html_middlewares(server) { + const html_middlewares = ['viteServeStaticMiddleware']; for (let i = server.stack.length - 1; i > 0; i--) { - // @ts-expect-error using internals - if (static_middlewares.includes(server.stack[i].handle.name)) { + // @ts-expect-error using internals until https://github.com/vitejs/vite/pull/4640 is merged + if (html_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 950cae8e25b5..c2d8355bee1f 100644 --- a/packages/kit/src/vite/index.js +++ b/packages/kit/src/vite/index.js @@ -213,7 +213,6 @@ 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 262eb48c9c24..078e6146ed3a 100644 --- a/packages/kit/src/vite/preview/index.js +++ b/packages/kit/src/vite/preview/index.js @@ -44,13 +44,16 @@ export async function preview(vite, config, protocol) { const server = new Server(manifest); return () => { - // generated client assets and the contents of `static` + // files in `static` + vite.middlewares.use(scoped(assets, mutable(config.kit.files.assets))); + + // immutable generated client assets vite.middlewares.use( scoped( assets, sirv(join(config.kit.outDir, 'output/client'), { setHeaders: (res, pathname) => { - // only apply to immutable directory, not e.g. version.json + // only apply to build directory, not e.g. version.json if (pathname.startsWith(`/${config.kit.appDir}/immutable`)) { res.setHeader('cache-control', 'public,max-age=31536000,immutable'); }