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

是时候拥有自己的命令行工具了

时间:2023-04-03 20:11:00 Node.js

鏈瘒鍗氬涓昏浠嬬粛濡備綍浣跨敤commander銆乮nquirer鍜宑halk浠庨浂寮€濮嬫墦閫犲睘浜庤嚜宸辩殑鍛戒护琛屽伐鍏枫€?.涓€鍒嗛挓浣撻獙棣栧厛锛岃鎴戜滑鑺变竴鍒嗛挓浣撻獙涓€涓嬪垱寤鸿嚜宸辩殑鍛戒护琛宑li宸ュ叿鏄粈涔堟劅瑙夈€?.1銆傛柊寤洪」鐩洰褰曞鏋滄垜浠殑椤圭洰鍚嶇О鏄痟ello-cli锛屼娇鐢ㄥ涓嬪懡浠ゆ柊寤洪」鐩洰褰曘€俶kdirhello-cli&&cdhello-cli0.2銆傚垵濮嬪寲椤圭洰鎺ヤ笅鏉ワ紝浣跨敤npm-init鍛戒护鍒濆鍖栦竴涓畝鍗曠殑package.json鏂囦欢銆俷pminit-y-y鍛戒护琛ㄧず鎺ュ彈npm鐨勬墍鏈夐粯璁ゅ弬鏁拌缃€傜劧鍚庡皢package.json鏇挎崲涓轰互涓嬩唬鐮併€倇"name":"hello-cli","version":"1.0.0","description":"","main":"index.js","bin":{"hello":"hello"},"scripts":{"test":"echo\"Error:notestspecified\"&&exit1"},"keywords":[],"author":"","license":"ISC",鈥滀緷璧栤€濓細{鈥滅矇绗斺€濓細鈥淾2.4.2鈥濓紝鈥滄寚鎸ュ畼鈥濓細鈥淾2.20.0鈥濓紝鈥滆闂€呪€濓細鈥淾6.3.1鈥濓紝鈥渟helljs鈥濓細鈥淾0.8.3鈥潁}鐒跺悗浣跨敤npminstall瀹夎渚濊禆椤广€?.3銆傛柊寤哄叆鍙f枃浠跺湪椤圭洰鏍圭洰褰曟柊寤轰竴涓悕涓篽ello鐨勬枃浠讹紝涓嶅甫浠讳綍鍚庣紑銆傚€煎緱娉ㄦ剰鐨勬槸锛屾鏃剁殑鏂囦欢鍚嶆槸浣犵殑cli宸ュ叿杈撳叆鐨勭涓€涓懡浠わ紝姣斿npminstall锛岄偅涔坔ello灏辩浉褰撲簬npm銆傚苟灏嗕唬鐮佹浛鎹负浠ヤ笅鍐呭銆?!/usr/bin/envnodeconstprogram=require('commander');constinquirer=require('inquirer');constchalk=require('chalk');program.command('init').alias('i').description('Initializeproject').action(option=>{//璇ュ璞$敤浜庡瓨鍌ㄤ笌鐢ㄦ埛浜や簰鐨勬墍鏈夋暟鎹甽etconfig={//鍋囪鎴戜滑闇€瑕佺敤鎴疯嚜瀹氫箟椤圭洰鍚嶇ОprojectName:null};//浣跨敤chalk鎵撳嵃缇庡寲鍚庣殑鐗堟湰淇℃伅console.log(chalk.default.bold('hellov1.0.0'));//鐢ㄤ簬瀛樺偍鎵€鏈夌殑浜や簰姝ラ锛屾瘮濡傝鐢ㄦ埛杈撳叆椤圭洰鍚嶇О鏄楠や箣涓€letprompts=[];if(config.projectName===null){prompts.push({type:'input',name:'projectName',message:'Pleaseentertheprojectname',validate:input=>{if(!input){return'椤圭洰鍚嶇О涓嶈兘涓虹┖';}//鏇存柊瀵硅薄涓睘鎬х殑鏁版嵁config.projectName=input;returntrue;}});}//鍒扮洰鍓嶄负姝?涓庣敤鎴风殑鎵€鏈変氦浜掗兘宸茬粡瀹屾垚,answers鏄敤鎴锋敹闆嗙殑鎵€鏈夋暟鎹?/鍚屾椂杩欓噷鏄綘寮€濮嬫搷浣滅殑鍦版柟銆傝繖涓猚li宸ュ叿鐨勬牳蹇冧唬鐮佸簲璇ヤ粠杩欓噷寮€濮嬨€俰nquirer.prompt(promps).then(async(answers)=>{//鍦ㄨ繖閲屽仛鐐逛粈涔坈onsole.log(a绛旀锛夛紱});});program.parse(process.argv);0.4銆俷pmlink閭d箞闂鏉ヤ簡锛屽湪浣犵殑椤圭洰鏍圭洰褰曚笅浣跨敤npmlink锛岀劧鍚庡湪浣犳湰鍦板畨瑁呰繖涓悕瀛楀儚hello-cli杩欐牱鐨勫叏灞€npm鍖呯殑鍘熺悊鏄湪鍏ㄥ眬node_modules涓仛涓€涓綘鏈湴椤圭洰鐨勮蒋閾炬帴銆備互鏈」鐩负渚嬶紝鍏ㄥ眬hello鍛戒护宸茬粡鎸囧悜浜嗕綘鐨勬湰鍦扮洰褰曘€傚鏋滆鍙栨秷娴嬭瘯椤圭洰鐨勫叏灞€鏄犲皠锛屼篃鍙互杩涘叆椤圭洰鏍圭洰褰曪紝杈撳叆鍛戒护npmunlink銆傜劧鍚庝娇鐢ㄤ互涓嬪懡浠ゅ悆鎺変綘鐨勭涓€涓猚li宸ュ叿銆傚鏋滄姤閿欐彁绀烘病鏈夋潈闄愶紝鍦ㄥ懡浠ゅ墠鍔犱笂sudo鍗冲彲銆備綘濂絠nit#鎴?浣犲ソi1銆俢ommandercommander鏄疦ode.js鐜鐨勫懡浠よ鐣岄潰瑙e喅鏂规銆傚湪涓婇潰鐨勪竴鍒嗛挓浣撻獙绀轰緥涓紝鎴戜滑浣跨敤浜哻ommand銆乤lias銆乨escription銆乤ction杩欏洓涓狝PI銆俢ommandcommand琛ㄧず姝li宸ュ叿鍚戠敤鎴峰叕寮€鐨勫懡浠よ鎸囦护銆傛垜浠繕鏄互npminstall涓轰緥銆俢ommand('init')澹版槑涓€涓悕涓篿nit鐨勫懡浠ゃ€傚湪杩欓噷锛宨nit鐩稿綋浜巌nstallalias銆傚埆鍚嶆槸褰撳墠鍛戒护琛屽懡浠ょ殑杈冪煭鍛戒护銆傛瘮濡傚ぇ瀹堕兘鐭ラ亾npminstall鍙互绠€鍐欐垚npmi銆俰鏄畾涔夌殑aliasdescriptiondescription鏄綋鍓嶅懡浠よ鍛戒护鐨勬弿杩帮紝command浼氳嚜鍔ㄧ敓鎴愬綋鍓峜li宸ュ叿鐨勫府鍔╂枃妗o紝hello-h涓細鏄剧ず鎻忚堪锛屽鏋滀綘鐨勪竴鍒嗛挓浣撻獙椤圭洰杩樺湪鍦ㄩ偅閲岋紝鍦ㄥ懡浠よ杈撳叆hello-h鍙互鐪嬪埌鑷姩鐢熸垚鐨勫府鍔╂枃妗c€俛ctionaction鏄垜浠敞鍐岃嚜宸辩殑鍥炶皟鍑芥暟鐨勫湴鏂广€俻arse瑙f瀽鍛戒护灏辨槸瑙f瀽鍛戒护琛屻€備互涓嬫槸涓€鍒嗛挓浣撻獙椤圭洰涓病鏈夌敤鍒扮殑鍛戒护锛岄€夐」銆傝繕鏄妇涓緥瀛愬惂銆傚鏋滀綘鐢ㄨ繃hexo锛屼綘搴旇瀵硅繖涓懡浠ゅ緢鐔熸倝銆傛病鐢ㄨ繃hexonewpost$YOUR_POST_NAME涔熸病鍏崇郴锛岃繖涓懡浠ょ敤鏉ュ垱寤鸿嚜瀹氫箟鍚嶇О鐨凪arkdown鏂囨。銆傛偍鍙兘浼氬彂鐜颁笂闈㈢殑鍛戒护鍖呭惈4涓崟璇嶏紝浣嗗湪鎴戜滑鐨勭ず渚嬩腑鍙湁涓や釜銆傞偅鏄洜涓轰竴鍒嗛挓鐨勯」鐩病鏈夌敤鍒癱ommander鐨刼ptionAPI銆傚鏋滀綘鎯冲湪hello椤圭洰涓疄鐜板悓鏍风殑鍛戒护锛屽彧闇€瑕佸湪绋嬪簭涓皟鐢ㄨ繖涓狝PI鍗冲彲銆?option('-p,--post','addpost')锛岀劧鍚庡彲浠ラ€氳繃option鍙傛暟鑾峰彇-p鍚庣敤鎴疯緭鍏ョ殑鍙傛暟鍊笺€?銆佹煡璇㈠櫒澶у涔熷彂鐜颁簡锛屽湪鍛戒护琛岃緭鍏nit鍛戒护鍚庯紝鎴戜滑闇€瑕佷笉鏂殑鍜屽懡浠よ杩涜浜や簰鏉ヨ幏鍙栨暟鎹紝浣嗘槸鍦ㄤ唬鐮佷腑骞舵病鏈変綋鐜板嚭鏉ャ€傝繖鏄洜涓烘垜浠娇鐢ㄨ闂€呮潵甯姪鎴戜滑銆傝繖浜涗笢瑗裤€傞€氳繃鏌ヨ鍣紝鎴戜滑鍙互瀹炵幇杈撳叆妗嗭紝鑾峰彇鐢ㄦ埛鐨勮緭鍏ユ暟鎹紝涔熷彲浠ュ疄鐜伴€夋嫨妗嗐€傛瘮濡傜敤杩嘺ntd-design-pro鐨勫簲璇ュ鍒涘缓椤圭洰鐨勬祦绋嬩笉闄岀敓銆傚湪鍛戒护琛岃緭鍏ュ懡浠arncreateumi锛屽湪鍚庣画杩囩▼涓細鍑虹幇鍙€夊垪琛ㄣ€傚彧闇€灏嗘楠や腑鐨勪唬鐮佹浛鎹负浠ヤ笅鍐呭鍗冲彲銆俻romps.push({type:'list',name:'projectName',message:'璇疯緭鍏ラ」鐩悕绉?,choices:[{name:'ant-design-pro',value:'ant-design-pro'},{鍚嶇О:'dva',鍊?'dva'}]});椤圭洰涓繕浣跨敤浜唙alidate鏉ラ獙璇佺敤鎴疯緭鍏ョ殑鏁版嵁銆傚鏋滀笉闇€瑕侀獙璇侊紝鍙渶鍒犻櫎validate鐨勬暣涓唬鐮併€?.chalkchalk娌′粈涔堝ソ浠嬬粛鐨勩€傚畼缃戠殑鏂囨。宸茬粡鍐欑殑寰堣缁嗕簡銆傚彧鏄粰浣犱竴涓」鐩腑浣跨敤鐨勭ず渚嬪垪琛ㄣ€?/浣跨敤榛樿瀛椾綋棰滆壊锛屽姞绮楀瓧浣揷onsole.log(chalk.default.bold('hellov1.0.0'));//鎵撳嵃钃濊壊鎻愮ず淇℃伅console.log(chalk.blue('hellov1.0.0'));//瀛楃涓叉ā鏉跨敤娉曪紝鍦ㄥ悓涓€琛屾墦鍗颁笉鍚岄鏍肩殑淇℃伅console.log(chalk`{white.bold[1/3]}馃攳`+chalk`{default.boldCloneprojectintolocalpath...}`);4.鏈€鍚庯紝濡傛灉浣犲帉鍊︿簡鐢∟ode.js鍐欏悗绔紝鎯崇敤Java涓殑SpringBoot鏉ュ啓锛屼絾鏄張鎷呭績鎼缓鐜浼氭氮璐瑰お澶氭椂闂淬€傞偅浣犲彲浠ヨ瘯璇晇enus-init锛屽彧闇€涓€琛屽懡浠ゅ氨鍙互蹇€熸惌寤篔ava寮€鍙戠幆澧冦€傚揩涔愮殑榛戝鏀诲嚮銆?/p>