Skip to content

Commit c68d51b

Browse files
authored
improve boot speed with lazy module load (#157)
1 parent c2301dc commit c68d51b

File tree

1 file changed

+22
-17
lines changed

1 file changed

+22
-17
lines changed

src/bin.ts

Lines changed: 22 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -6,13 +6,7 @@ import yargs from 'yargs'
66
import { setBuildRoot, setBuildConfigFilePath, setNeedCache } from './utils/paths'
77
import { Env, setEnv } from './utils/build-env'
88
import logger from './utils/logger'
9-
import prepare from './prepare'
10-
import clean from './clean'
11-
import generate from './generate'
12-
import upload from './upload'
13-
import serve from './serve'
149
import { setNeedAnalyze } from './utils/build-conf'
15-
import test from './test'
1610

1711
// 禁掉 auto freeze,否则有的插件改数据时会异常,
1812
// 比如 postcss-loader 会去 delete options 上的 plugins 字段;
@@ -64,40 +58,51 @@ interface Command {
6458
const commands: Record<string, Command> = {
6559
clean: {
6660
desc: 'Clean result file',
67-
handler: clean
61+
async handler() {
62+
// By `require` in `handler` instead of `import` at the top, modules will be lazily loaded.
63+
// When executing one command, builder does not need to load unnecessary modules, so we get performance improvement.
64+
// P.S. We always overestimate the speed of module loading in Node.js
65+
await require('./clean').default()
66+
}
6867
},
6968
generate: {
7069
desc: 'Generate result file',
71-
handler: generate
70+
async handler() {
71+
await require('./generate').default()
72+
}
7273
},
7374
upload: {
7475
desc: 'Upload result file',
75-
handler: upload
76+
async handler() {
77+
await require('./upload').default()
78+
}
7679
},
7780
test: {
7881
desc: 'Run unit test cases',
79-
handler: test
82+
async handler() {
83+
await require('./test').default()
84+
}
8085
},
8186
build: {
8287
desc: 'Clean, generate & upload result file',
8388
async handler() {
84-
await clean()
85-
await generate()
86-
await upload()
89+
await require('./clean').default()
90+
await require('./generate').default()
91+
await require('./upload').default()
8792
}
8893
},
8994
serve: {
9095
isDefault: true,
9196
desc: 'Launch the dev server',
92-
handler(args) {
93-
return serve(args.PORT as number)
97+
async handler(args) {
98+
await require('./serve').default(args.PORT as number)
9499
}
95100
},
96101
analyze: {
97102
desc: 'Visually analyze bundle dependencies',
98103
async handler() {
99104
setNeedAnalyze(true)
100-
await generate()
105+
await require('./generate').default()
101106
}
102107
}
103108
}
@@ -151,7 +156,7 @@ Object.entries(commands).forEach(([name, { desc, handler, isDefault }]) => {
151156
applyArgv(argv)
152157

153158
try {
154-
await prepare()
159+
await require('./prepare').default()
155160
await handler(argv)
156161
} catch(e) {
157162
handleError(e)

0 commit comments

Comments
 (0)