宸ヤ綔涓緢澶氶」鐩兘鏄熀浜巙mi寮€鍙戠殑锛屾墍浠ユ渶杩戝涔犱簡umi鐨勬簮鐮侊紝瀵硅繖涓鏋舵湁浜嗘洿娣辩殑鍗拌薄~銆傚鏋滀綘涔熸湁鍏磋叮锛屾杩庡拰鎴戜竴璧峰涔犳垨澶嶄範銆傛湰鏂囧皢甯︿綘浠庨」鐩紑濮嬶紝涓€姝ユ浜嗚Вumi鐨勬牳蹇冮儴鍒嗐€傛垜浠湪鍒涘缓umi椤圭洰鍚庯紝绗竴姝ヤ竴鑸槸浣跨敤yarnstart鍛戒护鏉ヨ繍琛屽畠锛屽畠鏄敱umidev鎵ц鐨勶紝涔熷氨鏄痷mi鍛戒护锛屾墍浠ュ厛鏉ョ湅鐪媢mi鍛戒护鏄€庝箞瀹氫箟鐨勩€備笅闈㈡彁鍒扮殑婧愮爜鐩綍鍦╱mi婧愮爜浠撳簱鐨?packages鐩綍涓嬨€倁mi鍛戒护umi鍛戒护瀹氫箟鍦?umi/bin鐩綍涓嬶紝榛樿鎵ц/umi/src/cli.ts銆傞€昏緫濡備笅锛?.鍙傛暟褰掍竴鍖栦娇鐢▂args-parser搴撳鐞嗗懡浠よ鍙傛暟锛屽鐞嗙増鏈拰甯姪鍛戒护鐨勯€昏緫銆?.[dev]鍚姩涓€涓柊杩涚▼杩欓噷鏄痙ev鍜宐uild鐨勫尯鍒€傚紑鍙戠幆澧冧細棰濆鍚姩涓€涓柊鐨勮繘绋嬫潵杩愯鏈嶅姟锛屽苟鍋氫竴浜涗簨浠剁洃鍚拰閫氫俊澶勭悊銆傝繖閮ㄥ垎浠g爜鍦?umi/src/utils/fork.ts涓€傛牳蹇冮€昏緫涓昏鏈変笁閮ㄥ垎锛?####2.1澶勭悊绔彛鍙烽粯璁ょ鍙d负8000锛屽鏋滆鍗犵敤浼氳嚜鍔ㄥ姞1銆?####2.2鍚姩鏂拌繘绋嬩娇鐢╟hild_process鐨刦ork鍒涘缓涓€涓柊鐨勫瓙杩涚▼锛屾墽琛?umi/src/forkedDev.ts銆傝鏂囦欢涓殑閫昏緫鏄笅闈㈢殑绗笁姝ュ拰绗洓姝ャ€?####2.3澶勭悊閫氫俊瀛愯繘绋嬪垱寤哄悗锛屼細鐩戝惉杩欎釜瀛愯繘绋嬬殑浜嬩欢鏉ヤ紶閫掓秷鎭€傝繖閲屼細澶勭悊涓や釜浜嬩欢锛歊ESTART閲嶅惎鍜孶PDATE_PORT鏇存柊绔彛銆備富杩涚▼锛堝綋鍓嶈繍琛寀mi鍛戒护鐨勮繘绋嬶級浼氱洃鍚琫xit绛変簨浠舵潃姝诲瓙杩涚▼锛岃Е鍙戞彃浠剁殑onExit浜嬩欢銆?銆佸垵濮嬪寲webpack鐨勪唬鐮佸湪/umi/src/initWebpack.ts銆傚湪鍒濆鍖栦箣鍓嶏紝棣栧厛浼氬幓閰嶇疆鏂囦欢涓煡鐪嬫槸鍚︽湁webpack5鎴栬€卪fsu鐨勯厤缃€傚鏋滄槸锛屽垯鍒濆鍖杦ebpack5锛屽鏋滀笉鏄紝鍒欏垵濮嬪寲webpack4銆傝繖鏄噸瑕佺殑涓€鐐广€倁mi鍦╠eps涓皝瑁呬簡绫讳技webpack鐨勪緷璧栥€備腑闂村晢鐨勬蹇靛湪涔嬪墠銆奤mi 4 璁捐鎬濊矾 銆嬬殑婕旇涓湁鎻愬埌銆俇mi浼氬仛涓€浜涢鎵撳寘宸ヤ綔鏉ヨВ鍐崇増鏈ǔ瀹氭€х殑闂銆?.鏋勫缓Service瀵硅薄鏈€鍚庯紝鎴戜滑璇村埌浜唘mi鐨勬牳蹇冮儴鍒嗐€備唬鐮佸緢鐭絾寰堥噸瑕併€俛waitnewService({...params}).run({name:'dev',//or'build'args,});杩欓噷鏈変竴涓壒娈婄殑澶勭悊锛岀敤浜庡垵濮嬪寲鐨凷ervice鍋氫簡涓€涓皬灏佽锛宲reset-built-in鏄粯璁ゅ唴缃殑锛岃繖涓猵reset鏄彃浠舵墿灞曟柟娉曠殑瀹炵幇閮ㄥ垎銆俰mport{IServiceOpts,ServiceasCoreService}from'@umijs/core';classServiceextendsCoreService{constructor(opts:IServiceOpts){...super({...opts,presets:[require.resolve('@umijs/棰勮鍐呯疆'),...(opts.presets||[]),],鎻掍欢:[require.resolve('./plugins/umiAlias'),...(opts.plugins||[])],});}}plugin鏄痷mi璁捐涓潪甯搁噸瑕佺殑涓€鐜紝plugin鐨勬€濇兂璁﹗mi鍙互寰堟柟渚跨殑鎺у埗杩涚▼锛屽疄鐜板畾鍒跺寲锛岃繖涓€濇兂鏈変竴涓鍚嶅井鍐呮牳鏋舵瀯銆傛垜涓嶄細鍦ㄥ井鍐呮牳鏋舵瀯鐨勮繖涓€閮ㄥ垎灞曞紑銆備篃鏌ヤ簡璧勬枡锛屾寫浜嗕竴浜涢噸鐐癸紝閲嶇偣浜嗚В鏍稿績绯荤粺鐨勮璁℃€濊矾銆係ervice绫绘槸umi鐨勬牳蹇冪郴缁熴€傛牳蹇冪被Service鐨勪唬鐮佸湪/core/src/Service/Service.ts涓紝杩欎釜绫荤殑缁撴瀯寰堢畝鍗曪紝鍙湁鏋勯€犲嚱鏁板拰run()鏂规硶涓ら儴鍒嗐€俢onstructor鏋勯€犲嚱鏁板垵濮嬪寲闃舵鐨勪富瑕佸伐浣滄槸鏀堕泦閰嶇疆銆備粠杩欓噷鍙互鐪嬪嚭浣滆€呮槸澶氫箞鐨勭粏鑷达紝鐜鍙橀噺鐨勪紭鍏堢骇锛岄厤缃枃浠剁殑浼樺厛绾э紝鐢氳嚦椤甸潰鐩綍鍚嶇殑缁嗚妭閮藉畨鎺掔殑寰堝ソ銆傛竻娓呮妤氿煒傘€備粠鍥句腑鍙互娓呮鐨勭湅鍒板垵濮嬪寲鐨勫睘鎬э紝杩欓噷涓嶅啀璧樿堪銆傝繖閲屽彧鍒楀嚭浜嗭紙鎴戣涓猴級閲嶈鐨勯儴鍒嗐€傚湪鍒濆鍖栭璁惧拰鎻掍欢鏃讹紝浼氳褰曟墍鏈夋彃浠剁殑淇℃伅锛岃繖灏辨槸鎻掍欢娉ㄥ唽琛紝鏂逛究鎻掍欢鐨勭鐞嗗拰杩愯銆俽un()杩愯~鎬荤粨璧锋潵锛岃繖閮ㄥ垎灏辨槸鎸夌収鐢熷懡鍛ㄦ湡鎺ㄨ繘锛氬垵濮嬪寲presets鍜宲lugins锛岃缃竴浜沨ooks锛屾渶鍚庢墽琛宺unCommand()杩愯umi鍛戒护鐩稿叧鐨勫叿浣撻€昏緫銆係ervice鏈?涓敓鍛藉懆鏈燂紝鏄悗缁彃浠舵墽琛屼竴浜涘姩浣滅殑鍒ゆ柇渚濇嵁銆俥xportenumServiceStage{uninitialized,constructor,init,initPresets,initPlugins,initHooks,pluginReady,getConfig,getPaths,run,}presets鍜宲lugins鐨勫垵濮嬪寲閫昏緫鏄竴鏍风殑锛屾憳褰曚竴浜涢噸瑕佺殑浼唬鐮佸涓嬶細constapi=this.getPluginAPI({id,key,service:this})//鑾峰彇PluginAPI瀵硅薄锛岀敤浜庝紶閫掔粰鎻掍欢鏈韩锛屽嵆鎻掍欢鐨勫疄鐜拌鑼冦€倀his.registerPlugin(preset)//鎻掍欢娉ㄥ唽锛屾墽琛屼唬鐮佷负this.plugins[preset.id]=presetconst{presets,plugins}=awaitthis.applyAPI({api,apply:preset.apply})//鎵цplugin鍐呴儴鐨刟pply鏂规硶锛屽嵆returnapply()(api)PluginAPI鍦ㄨ繖涓被涓畾涔変簡Plugin鐨勬牳蹇冩柟娉曪紝鍦╱mi鏂囨。涓凡缁忔湁璇︾粏浠嬬粛銆俛pplyPlugin()鏄彃浠舵墽琛岀殑鏍稿績鏂规硶銆傚弬鏁颁腑鐨勭被鍨嬪喅瀹氫簡鎻掍欢鎵ц鐨勯€昏緫銆俛dd鍜宮odify浼氭坊鍔犳垨淇敼initialValue锛岃繍琛屽悗杩斿洖缁撴灉銆俥vent椤惧悕鎬濅箟锛屼綔涓轰簨浠跺瓨鍦ㄣ€倀apable(webpack)杩樺湪瀛︿範鍜屾€荤粨涓€傚鏋滀綘鏈変紭绉€鐨勬枃绔狅紝璇锋帹鑽愮粰鎴憕銆傝繖閲岀殑runCommand()涓昏鐪媎ev鍛戒护鐩稿叧鐨勯€昏緫锛屼唬鐮佸湪preset-built-in/src/plugins/commands/dev/dev.ts銆俻reset-built-in杩欐槸umi榛樿鐨勬彃浠堕泦锛屽疄鐜扮殑鍔熻兘涓昏鍖呮嫭浜斾釜閮ㄥ垎锛歳egistorMethods缁熶竴娉ㄥ唽鏂规硶銆傝矾鐢遍厤缃殑瀹炵幇銆傚啓涓存椂鏂囦欢src/.umi鐩綍涓嬬殑鏂囦欢鐢熸垚杩囩▼灏卞湪杩欓噷锛屽寘鎷」鐩繍琛岀殑鍏ュ彛銆佽矾鐢便€佹彃浠剁瓑銆傚湪umi鐨勬枃妗i厤缃腑閰嶇疆瀹炵幇銆俢ommands鍛戒护鐨勫叿浣撳疄鐜伴€昏緫涓巜ebpack閰嶇疆淇敼鐩稿叧銆傚氨鍒嗕韩鍒拌繖閲屽惂锛屽鏈夐敊璇鎸囨銆傚弬鑰冦€婅殏铓佸墠绔爺鍙戞渶浣冲疄璺点€嬫枃瀛楃銆奤mi 4 璁捐鎬濊矾 - 浜戣唉銆嬭棰?鏂囧瓧鐗堛€妘mi婧愮爜銆嬬煡涔庝笓鏍弖mi婧愮爜-骞曞竷
