Skip to content

Commit f469999

Browse files
committed
[fix] enable Vite pre-bundling except for Svelte packages
1 parent 54fdedb commit f469999

File tree

4 files changed

+64
-44
lines changed

4 files changed

+64
-44
lines changed

.changeset/cuddly-files-decide.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
'@sveltejs/kit': patch
3+
---
4+
5+
[fix] enable Vite pre-bundling except for Svelte packages

packages/kit/src/core/build/index.js

Lines changed: 47 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ import fs from 'fs';
22
import path from 'path';
33
import { rimraf } from '../filesystem/index.js';
44
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';
66
import { deep_merge, print_config_conflicts } from '../config/index.js';
77
import { create_app } from '../../core/create_app/index.js';
88
import 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
*/
505511
async 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

packages/kit/src/core/dev/index.js

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ import { create_app } from '../../core/create_app/index.js';
1111
import { rimraf } from '../filesystem/index.js';
1212
import { respond } from '../../runtime/server/index.js';
1313
import { getRawBody } from '../node/index.js';
14-
import { copy_assets, get_no_external, resolve_entry } from '../utils.js';
14+
import { copy_assets, get_svelte_packages, resolve_entry } from '../utils.js';
1515
import { deep_merge, print_config_conflicts } from '../config/index.js';
1616
import { svelte } from '@sveltejs/vite-plugin-svelte';
1717
import { get_server } from '../server/index.js';
@@ -112,6 +112,8 @@ class Watcher extends EventEmitter {
112112
// don't warn on overriding defaults
113113
const [modified_vite_config] = deep_merge(default_config, vite_config);
114114

115+
const svelte_packages = get_svelte_packages(this.cwd);
116+
115117
/** @type {[any, string[]]} */
116118
const [merged_config, conflicts] = deep_merge(modified_vite_config, {
117119
configFile: false,
@@ -140,6 +142,12 @@ class Watcher extends EventEmitter {
140142
input: path.resolve(`${this.dir}/runtime/internal/start.js`)
141143
}
142144
},
145+
optimizeDeps: {
146+
exclude: [
147+
...((vite_config.optimizeDeps && vite_config.optimizeDeps.exclude) || []),
148+
...svelte_packages
149+
]
150+
},
143151
plugins: [
144152
svelte({
145153
extensions: this.config.extensions,
@@ -156,12 +164,9 @@ class Watcher extends EventEmitter {
156164
...(this.https ? { server: this.server, port: this.port } : {})
157165
}
158166
},
159-
optimizeDeps: {
160-
entries: []
161-
},
162167
ssr: {
163-
// @ts-expect-error ssr is considered in beta, so not exposed by Vite
164-
noExternal: get_no_external(this.cwd, vite_config.ssr && vite_config.ssr.noExternal)
168+
// @ts-expect-error ssr is considered in alpha, so not yet exposed by Vite
169+
noExternal: [...((vite_config.ssr && vite_config.ssr.noExternal) || []), ...svelte_packages]
165170
}
166171
});
167172

packages/kit/src/core/utils.js

Lines changed: 1 addition & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -82,7 +82,7 @@ export function posixify(str) {
8282
* @param {string} cwd
8383
* @returns {string[]}
8484
*/
85-
function find_svelte_packages(cwd) {
85+
export function get_svelte_packages(cwd) {
8686
const pkg_file = path.join(cwd, 'package.json');
8787
if (!fs.existsSync(pkg_file)) return [];
8888

@@ -98,11 +98,3 @@ function find_svelte_packages(cwd) {
9898
return !!dep_pkg.svelte;
9999
});
100100
}
101-
102-
/**
103-
* @param {string} cwd
104-
* @param {string[]} [user_specified_deps]
105-
*/
106-
export function get_no_external(cwd, user_specified_deps = []) {
107-
return [...user_specified_deps, ...find_svelte_packages(cwd)];
108-
}

0 commit comments

Comments
 (0)