@@ -2,7 +2,7 @@ import fs from 'fs';
2
2
import path from 'path' ;
3
3
import { rimraf } from '../filesystem/index.js' ;
4
4
import 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' ;
6
6
import { deep_merge , print_config_conflicts } from '../config/index.js' ;
7
7
import { create_app } from '../../core/create_app/index.js' ;
8
8
import vite from 'vite' ;
@@ -33,6 +33,7 @@ export async function build(config, { cwd = process.cwd(), runtime = '@sveltejs/
33
33
rimraf ( build_dir ) ;
34
34
35
35
const output_dir = path . resolve ( cwd , `${ SVELTE_KIT } /output` ) ;
36
+ const svelte_packages = get_svelte_packages ( cwd ) ;
36
37
37
38
const options = {
38
39
cwd,
@@ -49,7 +50,8 @@ export async function build(config, { cwd = process.cwd(), runtime = '@sveltejs/
49
50
} ) ,
50
51
output_dir,
51
52
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
53
55
} ;
54
56
55
57
const client_manifest = await build_client ( options ) ;
@@ -132,7 +134,7 @@ async function build_client({
132
134
} ) ;
133
135
134
136
/** @type {any } */
135
- const user_config = config . kit . vite ( ) ;
137
+ const vite_config = config . kit . vite ( ) ;
136
138
137
139
const default_config = {
138
140
server : {
@@ -143,10 +145,10 @@ async function build_client({
143
145
} ;
144
146
145
147
// 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 ) ;
147
149
148
150
/** @type {[any, string[]] } */
149
- const [ merged_config , conflicts ] = deep_merge ( modified_user_config , {
151
+ const [ merged_config , conflicts ] = deep_merge ( modified_vite_config , {
150
152
configFile : false ,
151
153
root : cwd ,
152
154
base,
@@ -203,6 +205,7 @@ async function build_client({
203
205
* output_dir: string;
204
206
* client_entry_file: string;
205
207
* service_worker_entry_file: string | null;
208
+ * svelte_packages: string[];
206
209
* }} options
207
210
* @param {ClientManifest } client_manifest
208
211
* @param {string } runtime
@@ -216,7 +219,8 @@ async function build_server(
216
219
build_dir,
217
220
output_dir,
218
221
client_entry_file,
219
- service_worker_entry_file
222
+ service_worker_entry_file,
223
+ svelte_packages
220
224
} ,
221
225
client_manifest ,
222
226
runtime
@@ -419,8 +423,8 @@ async function build_server(
419
423
. trim ( )
420
424
) ;
421
425
422
- /** @type {any } */
423
- const user_config = config . kit . vite ( ) ;
426
+ /** @type {import('vite').UserConfig } */
427
+ const vite_config = config . kit . vite ( ) ;
424
428
425
429
const default_config = {
426
430
server : {
@@ -431,10 +435,10 @@ async function build_server(
431
435
} ;
432
436
433
437
// 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 ) ;
435
439
436
440
/** @type {[any, string[]] } */
437
- const [ merged_config , conflicts ] = deep_merge ( modified_user_config , {
441
+ const [ merged_config , conflicts ] = deep_merge ( modified_vite_config , {
438
442
configFile : false ,
439
443
root : cwd ,
440
444
base,
@@ -457,11 +461,13 @@ async function build_server(
457
461
preserveEntrySignatures : 'strict'
458
462
}
459
463
} ,
460
- resolve : {
461
- alias : {
462
- $app : path . resolve ( `${ build_dir } /runtime/app` ) ,
463
- $lib : config . kit . files . lib
464
- }
464
+ optimizeDeps : {
465
+ // exclude Svelte packages because optimizer skips .svelte files leading to half-bundled
466
+ // broken packages https://github.com/vitejs/vite/issues/3910
467
+ exclude : [
468
+ ...( ( vite_config . optimizeDeps && vite_config . optimizeDeps . exclude ) || [ ] ) ,
469
+ ...svelte_packages
470
+ ]
465
471
} ,
466
472
plugins : [
467
473
svelte ( {
@@ -471,16 +477,17 @@ async function build_server(
471
477
}
472
478
} )
473
479
] ,
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
480
+ resolve : {
481
+ alias : {
482
+ $app : path . resolve ( `${ build_dir } /runtime/app` ) ,
483
+ $lib : config . kit . files . lib
484
+ }
485
+ } ,
477
486
ssr : {
478
487
// note to self: this _might_ need to be ['svelte', '@sveltejs/kit', ...get_no_external()]
479
488
// 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 : [ ]
489
+ // @ts -expect-error ssr is considered in alpha, so not yet exposed by Vite
490
+ noExternal : [ ...( ( vite_config . ssr && vite_config . ssr . noExternal ) || [ ] ) , ...svelte_packages ]
484
491
}
485
492
} ) ;
486
493
@@ -499,11 +506,21 @@ async function build_server(
499
506
* output_dir: string;
500
507
* client_entry_file: string;
501
508
* service_worker_entry_file: string | null;
509
+ * svelte_packages: string[];
502
510
* }} options
503
511
* @param {ClientManifest } client_manifest
504
512
*/
505
513
async function build_service_worker (
506
- { cwd, base, config, manifest, build_dir, output_dir, service_worker_entry_file } ,
514
+ {
515
+ cwd,
516
+ base,
517
+ config,
518
+ manifest,
519
+ build_dir,
520
+ output_dir,
521
+ service_worker_entry_file,
522
+ svelte_packages
523
+ } ,
507
524
client_manifest
508
525
) {
509
526
// TODO add any assets referenced in template .html file, e.g. favicon?
@@ -540,7 +557,7 @@ async function build_service_worker(
540
557
) ;
541
558
542
559
/** @type {any } */
543
- const user_config = config . kit . vite ( ) ;
560
+ const vite_config = config . kit . vite ( ) ;
544
561
545
562
const default_config = {
546
563
server : {
@@ -551,10 +568,10 @@ async function build_service_worker(
551
568
} ;
552
569
553
570
// don't warn on overriding defaults
554
- const [ modified_user_config ] = deep_merge ( default_config , user_config ) ;
571
+ const [ modified_vite_config ] = deep_merge ( default_config , vite_config ) ;
555
572
556
573
/** @type {[any, string[]] } */
557
- const [ merged_config , conflicts ] = deep_merge ( modified_user_config , {
574
+ const [ merged_config , conflicts ] = deep_merge ( modified_vite_config , {
558
575
configFile : false ,
559
576
root : cwd ,
560
577
base,
@@ -572,13 +589,18 @@ async function build_service_worker(
572
589
outDir : `${ output_dir } /client` ,
573
590
emptyOutDir : false
574
591
} ,
592
+ optimizeDeps : {
593
+ // exclude Svelte packages because optimizer skips .svelte files leading to half-bundled
594
+ // broken packages https://github.com/vitejs/vite/issues/3910
595
+ exclude : [
596
+ ...( ( vite_config . optimizeDeps && vite_config . optimizeDeps . exclude ) || [ ] ) ,
597
+ ...svelte_packages
598
+ ]
599
+ } ,
575
600
resolve : {
576
601
alias : {
577
602
'$service-worker' : path . resolve ( `${ build_dir } /runtime/service-worker` )
578
603
}
579
- } ,
580
- optimizeDeps : {
581
- entries : [ ]
582
604
}
583
605
} ) ;
584
606
0 commit comments