@@ -6,13 +6,7 @@ import yargs from 'yargs'
66import { setBuildRoot , setBuildConfigFilePath , setNeedCache } from './utils/paths'
77import { Env , setEnv } from './utils/build-env'
88import 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'
149import { 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 {
6458const 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