@@ -6,13 +6,7 @@ import yargs from 'yargs'
6
6
import { setBuildRoot , setBuildConfigFilePath , setNeedCache } from './utils/paths'
7
7
import { Env , setEnv } from './utils/build-env'
8
8
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'
14
9
import { setNeedAnalyze } from './utils/build-conf'
15
- import test from './test'
16
10
17
11
// 禁掉 auto freeze,否则有的插件改数据时会异常,
18
12
// 比如 postcss-loader 会去 delete options 上的 plugins 字段;
@@ -64,40 +58,51 @@ interface Command {
64
58
const commands : Record < string , Command > = {
65
59
clean : {
66
60
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
+ }
68
67
} ,
69
68
generate : {
70
69
desc : 'Generate result file' ,
71
- handler : generate
70
+ async handler ( ) {
71
+ await require ( './generate' ) . default ( )
72
+ }
72
73
} ,
73
74
upload : {
74
75
desc : 'Upload result file' ,
75
- handler : upload
76
+ async handler ( ) {
77
+ await require ( './upload' ) . default ( )
78
+ }
76
79
} ,
77
80
test : {
78
81
desc : 'Run unit test cases' ,
79
- handler : test
82
+ async handler ( ) {
83
+ await require ( './test' ) . default ( )
84
+ }
80
85
} ,
81
86
build : {
82
87
desc : 'Clean, generate & upload result file' ,
83
88
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 ( )
87
92
}
88
93
} ,
89
94
serve : {
90
95
isDefault : true ,
91
96
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 )
94
99
}
95
100
} ,
96
101
analyze : {
97
102
desc : 'Visually analyze bundle dependencies' ,
98
103
async handler ( ) {
99
104
setNeedAnalyze ( true )
100
- await generate ( )
105
+ await require ( './ generate' ) . default ( )
101
106
}
102
107
}
103
108
}
@@ -151,7 +156,7 @@ Object.entries(commands).forEach(([name, { desc, handler, isDefault }]) => {
151
156
applyArgv ( argv )
152
157
153
158
try {
154
- await prepare ( )
159
+ await require ( './ prepare' ) . default ( )
155
160
await handler ( argv )
156
161
} catch ( e ) {
157
162
handleError ( e )
0 commit comments