Skip to content

Commit 4f49edb

Browse files
authored
fix(ssr): simplify noExternal in dev (#169)
* fix(ssr): simplify noExternal in dev * chore: add changeset * refactor(options): cleanup svelte deps flow
1 parent 7ed8e0e commit 4f49edb

File tree

5 files changed

+86
-3
lines changed

5 files changed

+86
-3
lines changed

.changeset/brave-drinks-look.md

+5
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
'@sveltejs/vite-plugin-svelte': patch
3+
---
4+
5+
Only add all Svelte dependencies to ssr.noExternal in SSR build

packages/e2e-tests/kit-node/package.json

+2-1
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,8 @@
1111
"@sveltejs/adapter-node": "^1.0.0-next.46",
1212
"@sveltejs/kit": "^1.0.0-next.165",
1313
"e2e-test-dep-svelte-api-only": "workspace:*",
14-
"svelte": "^3.42.4"
14+
"svelte": "^3.42.4",
15+
"svelte-i18n": "^3.3.10"
1516
},
1617
"type": "module",
1718
"engines": {

packages/e2e-tests/kit-node/src/routes/index.svelte

+7
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818

1919
<script>
2020
import { onMount } from 'svelte';
21+
import { addMessages, init, _ } from 'svelte-i18n';
2122
// eslint-disable-next-line node/no-missing-import
2223
import Counter from '$lib/Counter.svelte';
2324
// eslint-disable-next-line node/no-missing-import
@@ -31,6 +32,11 @@
3132
mount_status = 'AFTER_MOUNT';
3233
});
3334
setSomeContext();
35+
addMessages('en', { welcome: 'hello' });
36+
init({
37+
fallbackLocale: 'en',
38+
initialLocale: 'en'
39+
});
3440
</script>
3541

3642
<main>
@@ -44,6 +50,7 @@
4450
<div id="after-child">after-child</div>
4551
<div id="load">{load_status}</div>
4652
<div id="mount">{mount_status}</div>
53+
<div>{$_('welcome')}</div>
4754
</main>
4855

4956
<!-- HMR-TEMPLATE-INJECT -->

packages/vite-plugin-svelte/src/utils/options.ts

+9-1
Original file line numberDiff line numberDiff line change
@@ -199,7 +199,7 @@ export function buildExtraViteConfig(
199199

200200
if (configEnv.command === 'serve') {
201201
extraViteConfig.optimizeDeps = buildOptimizeDepsForSvelte(
202-
svelteDeps.filter((dep) => dep.type === 'component-library'),
202+
svelteDeps,
203203
options,
204204
config.optimizeDeps
205205
);
@@ -227,6 +227,8 @@ function buildOptimizeDepsForSvelte(
227227
options: ResolvedOptions,
228228
optimizeDeps?: DepOptimizationOptions
229229
): DepOptimizationOptions {
230+
// only svelte component libraries needs to be processed for optimizeDeps, js libraries work fine
231+
svelteDeps = svelteDeps.filter((dep) => dep.type === 'component-library');
230232
// include svelte imports for optimization unless explicitly excluded
231233
const include: string[] = [];
232234
const exclude: string[] = ['svelte-hmr'];
@@ -292,6 +294,12 @@ function buildSSROptionsForSvelte(
292294
if (!config.ssr?.external?.includes('svelte')) {
293295
noExternal.push('svelte');
294296
}
297+
} else {
298+
// for non-ssr build, we exclude svelte js library deps to make development faster
299+
// and also because vite doesn't handle them properly.
300+
// see https://github.com/sveltejs/vite-plugin-svelte/issues/168
301+
// see https://github.com/vitejs/vite/issues/2579
302+
svelteDeps = svelteDeps.filter((dep) => dep.type === 'component-library');
295303
}
296304

297305
// add svelte dependencies to ssr.noExternal unless present in ssr.external or optimizeDeps.include

pnpm-lock.yaml

+63-1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)