Skip to content

Commit 0b12c61

Browse files
committed
[chore] shared Vite build config
1 parent 712b4d8 commit 0b12c61

File tree

4 files changed

+87
-93
lines changed

4 files changed

+87
-93
lines changed

.changeset/empty-numbers-wink.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+
[chore] shared Vite build config

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

Lines changed: 10 additions & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -1,32 +1,25 @@
11
import fs from 'fs';
22
import path from 'path';
3-
import { svelte } from '@sveltejs/vite-plugin-svelte';
43
import { deep_merge } from '../../utils/object.js';
54
import { print_config_conflicts } from '../config/index.js';
6-
import { get_aliases } from '../utils.js';
7-
import { create_build, find_deps } from './utils.js';
5+
import { create_build, find_deps, get_default_config } from './utils.js';
86
import { posixify } from '../../utils/filesystem.js';
97

108
/**
119
* @param {{
1210
* cwd: string;
1311
* assets_base: string;
14-
* config: import('types').ValidatedConfig
15-
* manifest_data: import('types').ManifestData
12+
* config: import('types').ValidatedConfig;
13+
* manifest_data: import('types').ManifestData;
1614
* output_dir: string;
1715
* client_entry_file: string;
1816
* service_worker_entry_file: string | null;
1917
* service_worker_register: boolean;
2018
* }} options
2119
*/
22-
export async function build_client({
23-
cwd,
24-
assets_base,
25-
config,
26-
manifest_data,
27-
output_dir,
28-
client_entry_file
29-
}) {
20+
export async function build_client(options) {
21+
const { cwd, config, manifest_data, output_dir, client_entry_file } = options;
22+
3023
process.env.VITE_SVELTEKIT_APP_VERSION = config.kit.version.name;
3124
process.env.VITE_SVELTEKIT_APP_VERSION_FILE = `${config.kit.appDir}/version.json`;
3225
process.env.VITE_SVELTEKIT_APP_VERSION_POLL_INTERVAL = `${config.kit.version.pollInterval}`;
@@ -52,43 +45,10 @@ export async function build_client({
5245
});
5346

5447
/** @type {[any, string[]]} */
55-
const [merged_config, conflicts] = deep_merge(await config.kit.vite(), {
56-
configFile: false,
57-
root: cwd,
58-
base: assets_base,
59-
build: {
60-
cssCodeSplit: true,
61-
manifest: true,
62-
outDir: `${client_out_dir}/immutable`,
63-
polyfillDynamicImport: false,
64-
rollupOptions: {
65-
input,
66-
output: {
67-
entryFileNames: '[name]-[hash].js',
68-
chunkFileNames: 'chunks/[name]-[hash].js',
69-
assetFileNames: 'assets/[name]-[hash][extname]'
70-
},
71-
preserveEntrySignatures: 'strict'
72-
}
73-
},
74-
resolve: {
75-
alias: get_aliases(config)
76-
},
77-
plugins: [
78-
svelte({
79-
...config,
80-
emitCss: true,
81-
compilerOptions: {
82-
...config.compilerOptions,
83-
hydratable: !!config.kit.browser.hydrate
84-
},
85-
configFile: false
86-
})
87-
],
88-
// prevent Vite copying the contents of `config.kit.files.assets`,
89-
// if it happens to be 'public' instead of 'static'
90-
publicDir: false
91-
});
48+
const [merged_config, conflicts] = deep_merge(
49+
await config.kit.vite(),
50+
get_default_config({ ...options, client_out_dir, input, ssr: false })
51+
);
9252

9353
print_config_conflicts(conflicts, 'kit.vite.', 'build_client');
9454

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

Lines changed: 10 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,10 @@
11
import fs from 'fs';
22
import path from 'path';
3-
import { svelte } from '@sveltejs/vite-plugin-svelte';
43
import { mkdirp, posixify } from '../../utils/filesystem.js';
54
import { deep_merge } from '../../utils/object.js';
65
import { load_template, print_config_conflicts } from '../config/index.js';
7-
import { get_aliases, get_runtime_path, resolve_entry } from '../utils.js';
8-
import { create_build, find_deps } from './utils.js';
6+
import { get_runtime_path, resolve_entry } from '../utils.js';
7+
import { create_build, find_deps, get_default_config } from './utils.js';
98
import { s } from '../../utils/misc.js';
109

1110
/**
@@ -117,19 +116,17 @@ export class Server {
117116
* }} options
118117
* @param {{ vite_manifest: import('vite').Manifest, assets: import('rollup').OutputAsset[] }} client
119118
*/
120-
export async function build_server(
121-
{
119+
export async function build_server(options, client) {
120+
const {
122121
cwd,
123-
assets_base,
124122
config,
125123
manifest_data,
126124
build_dir,
127125
output_dir,
128126
service_worker_entry_file,
129127
service_worker_register
130-
},
131-
client
132-
) {
128+
} = options;
129+
133130
let hooks_file = resolve_entry(config.kit.files.hooks);
134131
if (!hooks_file || !fs.existsSync(hooks_file)) {
135132
hooks_file = path.join(config.kit.outDir, 'build/hooks.js');
@@ -211,40 +208,10 @@ export async function build_server(
211208
const [modified_vite_config] = deep_merge(default_config, vite_config);
212209

213210
/** @type {[any, string[]]} */
214-
const [merged_config, conflicts] = deep_merge(modified_vite_config, {
215-
configFile: false,
216-
root: cwd,
217-
base: assets_base,
218-
build: {
219-
ssr: true,
220-
outDir: `${output_dir}/server`,
221-
manifest: true,
222-
polyfillDynamicImport: false,
223-
rollupOptions: {
224-
input,
225-
output: {
226-
format: 'esm',
227-
entryFileNames: '[name].js',
228-
chunkFileNames: 'chunks/[name]-[hash].js',
229-
assetFileNames: 'assets/[name]-[hash][extname]'
230-
},
231-
preserveEntrySignatures: 'strict'
232-
}
233-
},
234-
plugins: [
235-
svelte({
236-
...config,
237-
compilerOptions: {
238-
...config.compilerOptions,
239-
hydratable: !!config.kit.browser.hydrate
240-
},
241-
configFile: false
242-
})
243-
],
244-
resolve: {
245-
alias: get_aliases(config)
246-
}
247-
});
211+
const [merged_config, conflicts] = deep_merge(
212+
modified_vite_config,
213+
get_default_config({ ...options, input, ssr: true })
214+
);
248215

249216
print_config_conflicts(conflicts, 'kit.vite.', 'build_server');
250217

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

Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,8 @@
1+
import { svelte } from '@sveltejs/vite-plugin-svelte';
12
import * as vite from 'vite';
3+
import { get_aliases } from '../utils.js';
4+
5+
const cwd = process.cwd();
26

37
/**
48
* @typedef {import('rollup').RollupOutput} RollupOutput
@@ -41,3 +45,61 @@ export function find_deps(file, manifest, js, css) {
4145
chunk.imports.forEach((file) => find_deps(file, manifest, js, css));
4246
}
4347
}
48+
49+
/**
50+
* @param {{
51+
* assets_base: string;
52+
* client_out_dir?: string;
53+
* config: import('types').ValidatedConfig;
54+
* input: Record<string, string>;
55+
* output_dir: string;
56+
* ssr: boolean;
57+
* }} options
58+
* @return {import('vite').UserConfig}
59+
*/
60+
export const get_default_config = function ({
61+
assets_base,
62+
client_out_dir,
63+
config,
64+
input,
65+
output_dir,
66+
ssr
67+
}) {
68+
return {
69+
base: assets_base,
70+
build: {
71+
cssCodeSplit: true,
72+
manifest: true,
73+
outDir: ssr ? `${output_dir}/server` : `${client_out_dir}/immutable`,
74+
polyfillDynamicImport: false,
75+
rollupOptions: {
76+
input,
77+
output: {
78+
format: 'esm',
79+
entryFileNames: ssr ? '[name].js' : '[name]-[hash].js',
80+
chunkFileNames: 'chunks/[name]-[hash].js',
81+
assetFileNames: 'assets/[name]-[hash][extname]'
82+
},
83+
preserveEntrySignatures: 'strict'
84+
},
85+
ssr
86+
},
87+
plugins: [
88+
svelte({
89+
...config,
90+
compilerOptions: {
91+
...config.compilerOptions,
92+
hydratable: !!config.kit.browser.hydrate
93+
},
94+
configFile: false
95+
})
96+
],
97+
// prevent Vite copying the contents of `config.kit.files.assets`,
98+
// if it happens to be 'public' instead of 'static'
99+
publicDir: false,
100+
resolve: {
101+
alias: get_aliases(config)
102+
},
103+
root: cwd
104+
};
105+
};

0 commit comments

Comments
 (0)