-
-
Notifications
You must be signed in to change notification settings - Fork 339
/
autoFullBuild.ts
88 lines (78 loc) · 2.37 KB
/
autoFullBuild.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
export { autoFullBuild }
import { build, Plugin, ResolvedConfig } from 'vite'
import { assert, assertWarning, isSSR_config, isViteCliCall } from '../utils'
import { prerender } from '../../prerender'
import { assertConfigVpsResolved } from './config/assertConfigVps'
import type { ConfigVpsResolved } from './config/ConfigVps'
const triggedByAutoFullBuild = '__triggedByAutoFullBuild'
type Config = ResolvedConfig & { vitePluginSsr: ConfigVpsResolved }
function autoFullBuild(): Plugin {
let config: Config
return {
name: 'vite-plugin-ssr:autoFullBuild',
apply: 'build',
configResolved(config_) {
assertConfigVpsResolved(config_)
config = config_
abortSSRBuild(config)
},
async writeBundle() {
if (config.vitePluginSsr.disableAutoFullBuild) {
return
}
const { configFile, root } = config
const isSSR = isSSR_config(config)
if (!isSSR) {
const configSSR = {
build: { ssr: true },
configFile,
root,
[triggedByAutoFullBuild as any]: true,
}
await build(configSSR)
}
if (
isSSR &&
istriggedByAutoFullBuild(config) &&
config.vitePluginSsr.prerender &&
!config.vitePluginSsr.prerender.disableAutoRun
) {
await prerender({ viteConfig: { configFile, root } })
}
},
}
}
function abortSSRBuild(config: Config) {
if (config.vitePluginSsr.disableAutoFullBuild) {
return
}
// CLI
if (isViteCliCall({ command: 'build', ssr: true })) {
abortCLI()
assert(false)
}
// API
if (isSSR_config(config) && !istriggedByAutoFullBuild(config)) {
abortAPI()
assert(false)
}
}
function istriggedByAutoFullBuild(config: Record<string, unknown>) {
return !!config[triggedByAutoFullBuild]
}
function abortCLI() {
assertWarning(
false,
'The CLI call `$ vite build --ssr` is outdated. It has no effect and is superfluous. Use only the CLI call `$ vite build` instead (it now also builds the server-side code).',
{ onlyOnce: true },
)
process.exit(0)
}
function abortAPI() {
assertWarning(
false,
'The Vite API call `await build({ build: { ssr: true } })` is outdated. It has no effect and is superfluous. Use only the Vite API call `await build()` (without `build.ssr`) instead, as it now also builds server-side code.',
{ onlyOnce: true },
)
process.exit(0)
}