@@ -2,7 +2,7 @@ import fs from 'fs';
22import path from 'path' ;
33import { rimraf } from '../filesystem/index.js' ;
44import create_manifest_data from '../../core/create_manifest_data/index.js' ;
5- import { copy_assets , get_no_external , posixify , resolve_entry } from '../utils.js' ;
5+ import { copy_assets , get_svelte_packages , posixify , resolve_entry } from '../utils.js' ;
66import { deep_merge , print_config_conflicts } from '../config/index.js' ;
77import { create_app } from '../../core/create_app/index.js' ;
88import vite from 'vite' ;
@@ -33,6 +33,7 @@ export async function build(config, { cwd = process.cwd(), runtime = '@sveltejs/
3333 rimraf ( build_dir ) ;
3434
3535 const output_dir = path . resolve ( cwd , `${ SVELTE_KIT } /output` ) ;
36+ const svelte_packages = get_svelte_packages ( cwd ) ;
3637
3738 const options = {
3839 cwd,
@@ -49,7 +50,8 @@ export async function build(config, { cwd = process.cwd(), runtime = '@sveltejs/
4950 } ) ,
5051 output_dir,
5152 client_entry_file : `${ SVELTE_KIT } /build/runtime/internal/start.js` ,
52- service_worker_entry_file : resolve_entry ( config . kit . files . serviceWorker )
53+ service_worker_entry_file : resolve_entry ( config . kit . files . serviceWorker ) ,
54+ svelte_packages
5355 } ;
5456
5557 const client_manifest = await build_client ( options ) ;
@@ -132,7 +134,7 @@ async function build_client({
132134 } ) ;
133135
134136 /** @type {any } */
135- const user_config = config . kit . vite ( ) ;
137+ const vite_config = config . kit . vite ( ) ;
136138
137139 const default_config = {
138140 server : {
@@ -143,10 +145,10 @@ async function build_client({
143145 } ;
144146
145147 // don't warn on overriding defaults
146- const [ modified_user_config ] = deep_merge ( default_config , user_config ) ;
148+ const [ modified_vite_config ] = deep_merge ( default_config , vite_config ) ;
147149
148150 /** @type {[any, string[]] } */
149- const [ merged_config , conflicts ] = deep_merge ( modified_user_config , {
151+ const [ merged_config , conflicts ] = deep_merge ( modified_vite_config , {
150152 configFile : false ,
151153 root : cwd ,
152154 base,
@@ -203,6 +205,7 @@ async function build_client({
203205 * output_dir: string;
204206 * client_entry_file: string;
205207 * service_worker_entry_file: string | null;
208+ * svelte_packages: string[];
206209 * }} options
207210 * @param {ClientManifest } client_manifest
208211 * @param {string } runtime
@@ -216,7 +219,8 @@ async function build_server(
216219 build_dir,
217220 output_dir,
218221 client_entry_file,
219- service_worker_entry_file
222+ service_worker_entry_file,
223+ svelte_packages
220224 } ,
221225 client_manifest ,
222226 runtime
@@ -419,8 +423,8 @@ async function build_server(
419423 . trim ( )
420424 ) ;
421425
422- /** @type {any } */
423- const user_config = config . kit . vite ( ) ;
426+ /** @type {import('vite').UserConfig } */
427+ const vite_config = config . kit . vite ( ) ;
424428
425429 const default_config = {
426430 server : {
@@ -431,10 +435,10 @@ async function build_server(
431435 } ;
432436
433437 // don't warn on overriding defaults
434- const [ modified_user_config ] = deep_merge ( default_config , user_config ) ;
438+ const [ modified_vite_config ] = deep_merge ( default_config , vite_config ) ;
435439
436440 /** @type {[any, string[]] } */
437- const [ merged_config , conflicts ] = deep_merge ( modified_user_config , {
441+ const [ merged_config , conflicts ] = deep_merge ( modified_vite_config , {
438442 configFile : false ,
439443 root : cwd ,
440444 base,
@@ -457,11 +461,11 @@ async function build_server(
457461 preserveEntrySignatures : 'strict'
458462 }
459463 } ,
460- resolve : {
461- alias : {
462- $app : path . resolve ( ` ${ build_dir } /runtime/app` ) ,
463- $lib : config . kit . files . lib
464- }
464+ optimizeDeps : {
465+ exclude : [
466+ ... ( ( vite_config . optimizeDeps && vite_config . optimizeDeps . exclude ) || [ ] ) ,
467+ ... svelte_packages
468+ ]
465469 } ,
466470 plugins : [
467471 svelte ( {
@@ -471,16 +475,17 @@ async function build_server(
471475 }
472476 } )
473477 ] ,
474- // this API is marked as @alpha https://github.com/vitejs/vite/blob/27785f7fcc5b45987b5f0bf308137ddbdd9f79ea/packages/vite/src/node/config.ts#L129
475- // it's not exposed in the typescript definitions as a result
476- // so we need to ignore the fact that it's missing
478+ resolve : {
479+ alias : {
480+ $app : path . resolve ( `${ build_dir } /runtime/app` ) ,
481+ $lib : config . kit . files . lib
482+ }
483+ } ,
477484 ssr : {
478485 // note to self: this _might_ need to be ['svelte', '@sveltejs/kit', ...get_no_external()]
479486 // but I'm honestly not sure. roll with this for now and see if it's ok
480- noExternal : get_no_external ( cwd , user_config . ssr && user_config . ssr . noExternal )
481- } ,
482- optimizeDeps : {
483- entries : [ ]
487+ // @ts -expect-error ssr is considered in alpha, so not yet exposed by Vite
488+ noExternal : [ ...( ( vite_config . ssr && vite_config . ssr . noExternal ) || [ ] ) , ...svelte_packages ]
484489 }
485490 } ) ;
486491
@@ -499,11 +504,21 @@ async function build_server(
499504 * output_dir: string;
500505 * client_entry_file: string;
501506 * service_worker_entry_file: string | null;
507+ * svelte_packages: string[];
502508 * }} options
503509 * @param {ClientManifest } client_manifest
504510 */
505511async function build_service_worker (
506- { cwd, base, config, manifest, build_dir, output_dir, service_worker_entry_file } ,
512+ {
513+ cwd,
514+ base,
515+ config,
516+ manifest,
517+ build_dir,
518+ output_dir,
519+ service_worker_entry_file,
520+ svelte_packages
521+ } ,
507522 client_manifest
508523) {
509524 // TODO add any assets referenced in template .html file, e.g. favicon?
@@ -540,7 +555,7 @@ async function build_service_worker(
540555 ) ;
541556
542557 /** @type {any } */
543- const user_config = config . kit . vite ( ) ;
558+ const vite_config = config . kit . vite ( ) ;
544559
545560 const default_config = {
546561 server : {
@@ -551,10 +566,10 @@ async function build_service_worker(
551566 } ;
552567
553568 // don't warn on overriding defaults
554- const [ modified_user_config ] = deep_merge ( default_config , user_config ) ;
569+ const [ modified_vite_config ] = deep_merge ( default_config , vite_config ) ;
555570
556571 /** @type {[any, string[]] } */
557- const [ merged_config , conflicts ] = deep_merge ( modified_user_config , {
572+ const [ merged_config , conflicts ] = deep_merge ( modified_vite_config , {
558573 configFile : false ,
559574 root : cwd ,
560575 base,
@@ -572,13 +587,16 @@ async function build_service_worker(
572587 outDir : `${ output_dir } /client` ,
573588 emptyOutDir : false
574589 } ,
590+ optimizeDeps : {
591+ exclude : [
592+ ...( ( vite_config . optimizeDeps && vite_config . optimizeDeps . exclude ) || [ ] ) ,
593+ ...svelte_packages
594+ ]
595+ } ,
575596 resolve : {
576597 alias : {
577598 '$service-worker' : path . resolve ( `${ build_dir } /runtime/service-worker` )
578599 }
579- } ,
580- optimizeDeps : {
581- entries : [ ]
582600 }
583601 } ) ;
584602
0 commit comments