当前位置: 首页 > 后端技术 > Node.js

什么是前端脚手架?

时间:2023-04-03 15:28:47 Node.js

馃様鎴戜滑涓嶇煡閬撲篃涓嶆暍闂€傚厛鍦ㄧ櫨搴︾櫨绉戦噷鏌ヤ竴涓嬧€滆剼鎵嬫灦鈥濈殑瀹氫箟锛氳剼鎵嬫灦鏄负淇濊瘉鍚勯」鏂藉伐杩囩▼椤哄埄杩涜鑰屾惌寤虹殑宸ヤ綔骞冲彴銆傜劧鍚庢悳绱⑩€滆剼鎵嬫灦鈥濓紝鍩烘湰鏈変互涓嬪嚑绫伙細Vue/React鑴氭墜鏋朵娇鐢∟ode鍜寉eoman鎼缓鑷繁鐨勮剼鎵嬫灦浠庡ご寮€濮嬧€嬧€嬫惌寤簑ebpack鑴氭墜鏋惰繖涓椂鍊欐垜杩樻槸涓嶈兘纭畾浠€涔堟槸鈥滆剼鎵嬫灦鈥濄€傚彲鑳芥垜蹇冪洰涓殑鑴氭墜鏋跺簲璇ユ槸vue/cli鎴栬€卌reate-react-app鍚э紝鐒跺悗鎴戞墦寮€浜嗕粬浠殑鏂囨。锛屼絾鏄粬浠殑浠嬬粛骞舵病鏈夎杩欐槸鑴氭墜鏋躲€傘€傘€傝璇存垜鑷繁鐨勨€滆剼鎵嬫灦鈥濔煒旀垜鏈€鎬曞埆浜虹湅鍒版垜鈥滄惌鑴氭墜鏋垛€濆悗锛屾垜璇磋繖涓湁浠€涔堢敤銆傘€傘€傛垜鍦℅ithub涓婄湅浜嗘垜鐨勭涓€娆℃彁浜よ褰旵ommitsonFeb13,2017銆傚叆琛屼笁骞村浜嗭紝搴旇鏄涓€娆¤繘鍏ュ墠绔伐绋嬬殑鏃跺€欎簡銆傚湪姝や箣鍓嶏紝鎴戝湪鍏徃鎺ユ墜浜嗕竴浜涘緢绠€鍗曠殑椤圭洰銆傛垜鐩存帴鏂板缓浜嗕竴涓枃浠跺す锛屼笅杞戒簡涓€涓猨Query锛岀劧鍚庢柊寤轰簡index.htmlmain.jsstyle.css銆傛湁娌℃湁浜烘湁鍚屾牱鐨勭粡鍘嗭紵鍚庢潵鍋氫簡寰堝椤圭洰锛屾劅瑙夋瘡娆¢兘瑕佹柊寤轰竴涓」鐩紝澶夯鐑︿簡銆傛垜鍒涘缓浜嗕竴涓柊鐨勬枃浠跺す鏉ュ瓨鏀惧垵濮嬫ā鏉匡紝鐒跺悗澶嶅埗骞剁矘璐村畠缁х画銆傚悗鏉ユ帴瑙﹀埌vue锛屽湪缁堢杈撳叆涓€琛屾寚浠ゅ氨鍙互鐢熸垚妯℃澘锛屾瘮鎴戝鍒剁矘璐寸湅璧锋潵楂樼澶氫簡銆備负浜嗛€兼垜锛屾垜寮€濮嬬爺绌跺浣曞紑鍙戣嚜宸辩殑鈥滆剼鎵嬫灦鈥濄€傚綋鏃剁湡鐨勫緢灏戞湁鏂囩珷鎶婅繖涓搷浣滆В閲婃竻妤氾紝鐢氳嚦閮戒笉鐭ラ亾鑷繁瑕佸彨浠€涔堬紙鑴氭墜鏋讹級銆傛垜瀵光€滆剼鎵嬫灦鈥濈殑鐞嗚В馃鐧剧寰堥€傚悎鎴戙€傛渶閲嶈鐨勬槸纭繚鎴戠殑椤圭洰鑳藉椤哄埄杩涜銆傚府鍔╂垜蹇€熺敓鎴愭柊椤圭洰鐨勭洰褰曟ā鏉?Node.js)銆傚彲浠ユ彁楂樻垜鐨勫紑鍙戞晥鐜囧拰寮€鍙戣垝閫傚害锛坵ebpack锛夈€傛垜涓嶄細璋堣浠庡ご寮€濮嬫瀯寤轰竴浜涘共璐с€傛瘯绔熸悳浜嗕竴鍫嗭紝鍩烘湰灏辨帹鑽愪簡鍑犱釜搴擄紝commander锛宨nquirer锛宱ra绛夌瓑銆傚垎浜竴涓嬭嚜宸卞湪鑴氭墜鏋跺紑鍙戣繃绋嬩腑閬囧埌鐨勪竴浜涢棶棰樺拰闇€姹傦紝鎯冲垎浜粰澶у銆傜増鏈牎楠岄鍏堟帹鑽愬伐鍏峰簱锛歴emver锛岀増鏈瘮杈冦€俽equest锛屽彂閫佷竴涓姹傦紝褰撶劧浣犱篃鍙互浣跨敤axios銆俢onstsemver=require('semver');constrequest=require('璇锋眰');Node.js鐗堟湰楠岃瘉濡傛灉浣犳兂鎶婁綘鐨勮剼鎵嬫灦鍒嗕韩缁欎粬浜猴紝鏈€濂戒笉瑕侀伩寮€杩欎竴姝ワ紝鍥犱负濡傛灉浣犱娇鐢ㄤ簡涓€浜涚幇浠g殑ES璇硶锛屾瘮濡俛syncawait锛屽湪鏃х増鏈腑鏄棤娉曡繍琛岀殑銆俧unctioncheckNodeVersion(wanted){//process.version鍙互寰楀埌褰撳墠鑺傜偣鐗堟湰if(!semver.satisfies(process.version,wanted)){console.log('鑺傜偣鐗堟湰涓嶆敮鎸佸反鎷夊反鎷?);//閫€鍑鸿繘绋媝rocess.exit(1);}}鑴氭墜鏋剁増鏈獙璇佷笂闈㈣浜嗭紝濡傛灉浣犲垎浜粰鍒汉锛屼慨鏀逛簡涓€浜沚ug锛屽笇鏈涘埆浜虹敤鏈€鏂扮殑鐗堟湰锛岄偅涔堜綘搴旇鎻愰啋浠栥€俧unctioncheckPackageVersion(url){returnnewPromise((resolve,reject)=>{request(url,function(error,response,body){if(!error&&response.statusCode===200){letversion=JSON.parse(body).version;if(semver.lte(version,requiredVersion)){resolve();}else{console.log('闇€瑕佹洿鏂颁綘鐨勫寘blablabla');process.exit(1);}}else{console.log('鍙戦€佽姹傚け璐ョ瓑绛?);resolve();}});});}鍙傛暟url褰撶劧鏄湪npm閾炬帴涓紶鍏ttps://registry.npmjs.org/[浣犵殑鍖呭悕]/latest褰撳墠璺緞涓嬫槸鍚﹀瓨鍦ㄥ悓涓€涓枃浠跺す銆傚鏋滀綘涓嶅仛杩欎釜鍒ゆ柇锛屼綘鏂扮敓鎴愮殑椤圭洰寰堝彲鑳戒細瑕嗙洊浣犲凡鏈夌殑椤圭洰銆備笉瑕侀棶鎴戜负浠€涔堟兂鍒拌繖鏍峰仛馃槶functionhasFolder(name){returnnewPromise(resolve=>{fs.exists(name,exists=>{if(exists){console.log('鍚屼竴涓洰褰曞凡缁忓瓨鍦ㄥ瓨鍦˙arabara');process.exit(1);}else{resolve();}});});};杩欓噷鍔犱簡涓€灞侾romise锛屽洜涓篘ode妫€娴嬫枃浠跺す鏄惁瀛樺湪鏄竴涓紓姝ユ搷浣滐紝涔熼渶瑕佹椂闂达紝鎵€浠ヨ繕鏄瘮杈冨畨鍏ㄧ殑銆傛竻绌烘帶鍒跺彴褰撲綘杈撳叆瀹屽懡浠ゅ悗锛岀湅璧锋潵寰堣垝鏈嶏紝灏卞儚杩涘叆浜嗕竴涓柊椤甸潰涓€鏍枫€俧unctionclearConsole(color,str){if(process.stdout.isTTY&&store.cmd!=='test'){constblank='\n'.repeat(process.stdout.rows);鎺у埗鍙版棩蹇楋紙绌虹櫧锛夛紱readline.cursorTo(process.stdout,0,0);readline.clearScreenDown(process.stdout);}}澶嶅埗妯℃澘鑴氭墜鏋朵腑濡傛灉鎻愬埌浜嗕竴涓伐鍏穌ownload-git-repo锛岃浠巊ithub鎴栧叾浠栦粨搴撴ā鏉夸笅杞姐€傛垜寰堜笉鍠滄杩欑鎿嶄綔銆?銆佽垂鏃惰垂鍔涳紝浣垮緱鑴氭墜鏋舵惌寤洪€熷害杈冩參锛屾病鏈夌綉缁滄棤娉曟惌寤恒€?.闇€瑕佸湪git浠撳簱鏂板缓涓€涓」鐩ā鏉裤€傛劅瑙変竴涓」鐩垎鎴愪袱涓紝涓嶆柟渚跨鐞嗐€傛墍浠ユ垜鎵撶畻鐩存帴浠庡叏灞€鐩綍澶嶅埗妯℃澘鏂囦欢澶瑰埌褰撳墠璺緞锛氫娇鐢ㄤ竴涓伐鍏穎s-extra锛宯ode.js鏂版墜鏈€濂戒笉瑕佸皾璇曞鍒朵竴涓湁native鎺ュ彛鐨勬枃浠跺す銆俢onstsrc=path.resolve(__dirname,'../template');constdest=path.resolve(process.cwd(),store.dirname);涓や釜姒傚康锛氬叏灞€鐜璺緞锛歝onstsrc=path.resolve(__dirname,'浣犳ā鏉挎枃浠跺す鐨勭浉瀵硅矾寰?)褰撳墠鐜璺緞锛歝onstdest=path.resolve(process.cwd(),'椤圭洰鍚嶇О浣犲垱閫犱簡');fs.copy(src,dest).then(()=>/*宸存媺宸存媺*/);packagemanager鐨勮嚜鍔ㄩ€夋嫨鐜板湪瓒婃潵瓒婂鐨勪汉鐢▂arn浜嗭紝纭疄鏁堢巼寰堥珮銆傚鏋滀綘宸茬粡瀹夎浜唝arn锛岃瀹冩垚涓洪粯璁ょ殑鍖呯鐞嗗櫒鏉ヨ嚜鍔ㄥ畨瑁呬緷璧栥€俧unctionpackageManagement(){try{child_process.execSync('yarnpkg--version',{stdio:'ignore'});杩斿洖鈥滅罕绾库€濓紱}catch(e){return'npm';}}杩欓噷鑷姩瀹夎渚濊禆浠ode.js涓殑child_process.spawn鏂规硶涓轰緥锛岃鎵цnpminstallwebpack-Dconstls=spawn('npm',['isntall','webpack','-D'],{澶栧3:鐪焳);ls.on('close',(code)=>/*blahblahblah*/)绗竴涓弬鏁帮細瑕佽繍琛岀殑鍛戒护銆傜浜屼釜鍙傛暟锛氭暟缁勶紝瀛楃涓插弬鏁板垪琛ㄣ€傜涓変釜鍙傛暟锛歝onfiguration锛岃繖閲宻hell璁剧疆涓簍rue銆備娇鐢╫n鏂规硶鐩戞帶鎵ц缁撴灉銆傝繖閲屾帹鑽愮殑鍖呮槸鏈夌増鏈彿鐨勩€傚鏋滅洿鎺ュ畨瑁咃紝浼氬畨瑁呮渶鏂扮増鏈紝鍙兘浼氬鑷翠笉鍏煎銆傛彁鍒颁簡涓€涓獁ebpack鎻掍欢ProgressPlugin鏉ョ洃鎺х紪璇戣繘搴︺€俻lugins:[newwebpack.ProgressPlugin(function(percentage){//percentageprogress0-1})]杩欓噷鍙互閫氳繃涓婇潰鎻愬埌鐨勬帶鍒跺彴娓呯┖瀹炵幇鏇村ソ鐨勪綋楠屻€傝繖閲屼娇鐢↖P璁块棶椤圭洰鎸囩殑鏄痺ebpack鍚姩鐨刣evServer銆俬ost閰嶇疆涓?.0.0.0閫氳繃浠ヤ笅鍑芥暟鑾峰彇鏈満鐨処P鍦板潃锛岃繖鏍峰氨鍙互鍦ㄥ悓涓€缃戠粶涓嬩娇鐢ㄧЩ鍔ㄨ澶囪繘琛屾祴璇曚簡銆俧unctiongetIPAdress(){letinterfaces=require('os').networkInterfaces();//eslint-disable-next-lineguard-for-infor(letdevNameininterfaces){letiface=interfaces[devName];for(leti=0;i