Skip to content

Commit 93465a6

Browse files
committed
[chore] shared Vite build config
1 parent 712b4d8 commit 93465a6

File tree

6 files changed

+91
-109
lines changed

6 files changed

+91
-109
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 & 51 deletions
Original file line numberDiff line numberDiff line change
@@ -1,32 +1,24 @@
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;
13-
* assets_base: string;
14-
* config: import('types').ValidatedConfig
15-
* manifest_data: import('types').ManifestData
11+
* config: import('types').ValidatedConfig;
12+
* manifest_data: import('types').ManifestData;
1613
* output_dir: string;
1714
* client_entry_file: string;
1815
* service_worker_entry_file: string | null;
1916
* service_worker_register: boolean;
2017
* }} options
2118
*/
22-
export async function build_client({
23-
cwd,
24-
assets_base,
25-
config,
26-
manifest_data,
27-
output_dir,
28-
client_entry_file
29-
}) {
19+
export async function build_client(options) {
20+
const { cwd, config, manifest_data, output_dir, client_entry_file } = options;
21+
3022
process.env.VITE_SVELTEKIT_APP_VERSION = config.kit.version.name;
3123
process.env.VITE_SVELTEKIT_APP_VERSION_FILE = `${config.kit.appDir}/version.json`;
3224
process.env.VITE_SVELTEKIT_APP_VERSION_POLL_INTERVAL = `${config.kit.version.pollInterval}`;
@@ -52,43 +44,10 @@ export async function build_client({
5244
});
5345

5446
/** @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-
});
47+
const [merged_config, conflicts] = deep_merge(
48+
await config.kit.vite(),
49+
get_default_config({ ...options, client_out_dir, input, ssr: false })
50+
);
9251

9352
print_config_conflicts(conflicts, 'kit.vite.', 'build_client');
9453

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

Lines changed: 10 additions & 44 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
/**
@@ -107,7 +106,6 @@ export class Server {
107106
/**
108107
* @param {{
109108
* cwd: string;
110-
* assets_base: string;
111109
* config: import('types').ValidatedConfig
112110
* manifest_data: import('types').ManifestData
113111
* build_dir: string;
@@ -117,19 +115,17 @@ export class Server {
117115
* }} options
118116
* @param {{ vite_manifest: import('vite').Manifest, assets: import('rollup').OutputAsset[] }} client
119117
*/
120-
export async function build_server(
121-
{
118+
export async function build_server(options, client) {
119+
const {
122120
cwd,
123-
assets_base,
124121
config,
125122
manifest_data,
126123
build_dir,
127124
output_dir,
128125
service_worker_entry_file,
129126
service_worker_register
130-
},
131-
client
132-
) {
127+
} = options;
128+
133129
let hooks_file = resolve_entry(config.kit.files.hooks);
134130
if (!hooks_file || !fs.existsSync(hooks_file)) {
135131
hooks_file = path.join(config.kit.outDir, 'build/hooks.js');
@@ -211,40 +207,10 @@ export async function build_server(
211207
const [modified_vite_config] = deep_merge(default_config, vite_config);
212208

213209
/** @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-
});
210+
const [merged_config, conflicts] = deep_merge(
211+
modified_vite_config,
212+
get_default_config({ ...options, input, ssr: true })
213+
);
248214

249215
print_config_conflicts(conflicts, 'kit.vite.', 'build_server');
250216

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

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -4,11 +4,10 @@ import { s } from '../../utils/misc.js';
44
import { deep_merge } from '../../utils/object.js';
55
import { normalize_path } from '../../utils/url.js';
66
import { print_config_conflicts } from '../config/index.js';
7+
import { assets_base } from './utils.js';
78

89
/**
910
* @param {{
10-
* cwd: string;
11-
* assets_base: string;
1211
* config: import('types').ValidatedConfig;
1312
* manifest_data: import('types').ManifestData;
1413
* output_dir: string;
@@ -18,7 +17,7 @@ import { print_config_conflicts } from '../config/index.js';
1817
* @param {import('vite').Manifest} client_manifest
1918
*/
2019
export async function build_service_worker(
21-
{ cwd, assets_base, config, manifest_data, output_dir, service_worker_entry_file },
20+
{ config, manifest_data, output_dir, service_worker_entry_file },
2221
prerendered,
2322
client_manifest
2423
) {
@@ -69,9 +68,7 @@ export async function build_service_worker(
6968

7069
/** @type {[any, string[]]} */
7170
const [merged_config, conflicts] = deep_merge(await config.kit.vite(), {
72-
configFile: false,
73-
root: cwd,
74-
base: assets_base,
71+
base: assets_base(config),
7572
build: {
7673
lib: {
7774
entry: service_worker_entry_file,

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

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -26,18 +26,10 @@ export async function build(config, { log }) {
2626

2727
const { manifest_data } = sync.all(config);
2828

29-
// TODO this is so that Vite's preloading works. Unfortunately, it fails
30-
// during `svelte-kit preview`, because we use a local asset path. If Vite
31-
// used relative paths, I _think_ this could get fixed. Issue here:
32-
// https://github.com/vitejs/vite/issues/2009
33-
const { base, assets } = config.kit.paths;
34-
const assets_base = `${assets || base}/${config.kit.appDir}/immutable/`;
35-
3629
const options = {
3730
cwd,
3831
config,
3932
build_dir,
40-
assets_base,
4133
manifest_data,
4234
output_dir,
4335
client_entry_file: path.relative(cwd, `${get_runtime_path(config)}/client/start.js`),

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

Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
1+
import { svelte } from '@sveltejs/vite-plugin-svelte';
12
import * as vite from 'vite';
3+
import { get_aliases } from '../utils.js';
24

35
/**
46
* @typedef {import('rollup').RollupOutput} RollupOutput
@@ -41,3 +43,64 @@ export function find_deps(file, manifest, js, css) {
4143
chunk.imports.forEach((file) => find_deps(file, manifest, js, css));
4244
}
4345
}
46+
47+
/**
48+
* @param {{
49+
* client_out_dir?: string;
50+
* config: import('types').ValidatedConfig;
51+
* input: Record<string, string>;
52+
* output_dir: string;
53+
* ssr: boolean;
54+
* }} options
55+
* @return {import('vite').UserConfig}
56+
*/
57+
export const get_default_config = function ({ client_out_dir, config, input, output_dir, ssr }) {
58+
return {
59+
base: assets_base(config),
60+
build: {
61+
cssCodeSplit: true,
62+
manifest: true,
63+
outDir: ssr ? `${output_dir}/server` : `${client_out_dir}/immutable`,
64+
polyfillDynamicImport: false,
65+
rollupOptions: {
66+
input,
67+
output: {
68+
format: 'esm',
69+
entryFileNames: ssr ? '[name].js' : '[name]-[hash].js',
70+
chunkFileNames: 'chunks/[name]-[hash].js',
71+
assetFileNames: 'assets/[name]-[hash][extname]'
72+
},
73+
preserveEntrySignatures: 'strict'
74+
},
75+
ssr
76+
},
77+
plugins: [
78+
svelte({
79+
...config,
80+
compilerOptions: {
81+
...config.compilerOptions,
82+
hydratable: !!config.kit.browser.hydrate
83+
},
84+
configFile: false
85+
})
86+
],
87+
// prevent Vite copying the contents of `config.kit.files.assets`,
88+
// if it happens to be 'public' instead of 'static'
89+
publicDir: false,
90+
resolve: {
91+
alias: get_aliases(config)
92+
}
93+
};
94+
};
95+
96+
/**
97+
* @param {import('types').ValidatedConfig} config
98+
* @returns {string}
99+
*/
100+
export function assets_base(config) {
101+
// TODO this is so that Vite's preloading works. Unfortunately, it fails
102+
// during `svelte-kit preview`, because we use a local asset path. This
103+
// may be fixed in Vite 3: https://github.com/vitejs/vite/issues/2009
104+
const { base, assets } = config.kit.paths;
105+
return `${assets || base}/${config.kit.appDir}/immutable/`;
106+
}

0 commit comments

Comments
 (0)