Äú¿ÉÒÔ¾èÖú£¬Ö§³ÖÎÒÃǵĹ«ÒæÊÂÒµ¡£

1Ôª 10Ôª 50Ôª





ÈÏÖ¤Â룺  ÑéÖ¤Âë,¿´²»Çå³þ?Çëµã»÷Ë¢ÐÂÑéÖ¤Âë ±ØÌî



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓÆµ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Model Center   Code  
»áÔ±   
   
 
     
   
 ¶©ÔÄ
  ¾èÖú
ǰ¶Ë¹¤³Ì»¯-Feflowʵ¼ù
 
×÷Õߣº zhibinxie
  1791  次浏览      27
 2021-12-23
 
±à¼­ÍƼö:
±¾ÎĽ«½éÉÜÍŶÓÔÚǰ¶Ë¹¤³Ì»¯µÄʵ¼ù£¬Ö÷Òª²ÉÓÃfeflow×÷Ϊǰ¶Ë¹¤×÷Á÷£¬²¢½áºÏGit¹¤×÷Á÷£¬½«Ç°¶Ë¿ª·¢Á÷³ÌÖеĸ÷¸ö²½Öè½øÐÐÁ÷³Ì»¯£¬´Ó¶øÌá¸ß¿ª·¢Ð§ÂÊ¡£
±¾ÎÄÀ´×ÔÓÚQQÒôÀÖǰ¶ËÍÅ¶Ó ,ÓÉ»ðÁú¹ûÈí¼þAlice±à¼­ÍƼö¡£

ǰÑÔ

ǰ¶Ë¹¤³Ì»¯ÊÇÖ¸½«¿ª·¢½×¶ÎµÄ´úÂëת±ä³ÉÉú²ú»·¾³µÄ´úÂëµÄһϵÁв½Öè¡£Ö÷Òª°üÀ¨¹¹½¨£¬·ÖÖ§¹ÜÀí£¬×Ô¶¯»¯²âÊÔ£¬²¿ÊðµÈ²½Öè¡£±¾ÎĽ«½éÉÜÍŶÓÔÚǰ¶Ë¹¤³Ì»¯µÄʵ¼ù£¬Ö÷Òª²ÉÓÃfeflow×÷Ϊǰ¶Ë¹¤×÷Á÷£¬²¢½áºÏGit¹¤×÷Á÷£¬½«Ç°¶Ë¿ª·¢Á÷³ÌÖеĸ÷¸ö²½Öè½øÐÐÁ÷³Ì»¯£¬´Ó¶øÌá¸ß¿ª·¢Ð§ÂÊ¡£

Feflow ¼ò½é

FeflowÊÇÒ»¸öÓÃÓÚÌáÉý¿ª·¢Ð§ÂʵÄǰ¶Ë¹¤×÷Á÷ºÍ¹æ·¶¹¤¾ß£¬ÍйÜÔÚGithubÉÏ£ºTencent/feflow£¬Ä¿Ç°start 941£¬¹ÙÍø£ºhttps://feflowjs.com/zh/

Éè¼ÆË¼Ïë

Feflow ½è¼øÁË Pipline µÄ˼Ï룬½«ÈÕ³£µÄÑз¢¹¤×÷»®·ÖΪ£º³õʼ»¯¡¢±¾µØ¿ª·¢¡¢´ò°ü¹¹½¨¡¢¼ì²é¡¢·¢²¼ÉÏÏßÎå¸ö²½Öè¡£·Ö±ð¶ÔÓ¦ init¡¢dev¡¢build¡¢testºÍdeployÎå¸ö»ù±¾ÃüÁî¡£³ýÁË·þÎñºÃ»ù±¾µÄ¿ª·¢¹¤×÷Á÷ºÍ¹æ·¶£¬Feflow ÌṩÁËÒ×ÓÚÀ©Õ¹µÄ²å¼þ»úÖÆ£¬ÓÃÓÚ´òÔìÍŶÓͳһµÄ¹¤¾ßÁ´Éú̬¡£

ÿ¸ö½×¶Î×öµÄÊÂÇ飺

  • init ½×¶Î£ºÏîÄ¿³õʼ»¯£¬init½×¶ÎÎÒÃÇ¿ÉÒÔ¸ù¾ÝÄ£°å¿ìËÙµÄÉú³ÉÏîÄ¿²Ö¿â
  • dev ½×¶Î£º±¾µØ¿ª·¢½×¶Î
  • build ½×¶Î£ºÊ¹Óù¹½¨¹¤¾ß¶ÔÏîÄ¿½øÐдò°ü£¬Éú³ÉÓÃÓÚÉú³É»·¾³µÄ²úÎï
  • test ½×¶Î£º²¿ÊðÏîÄ¿µ½²âÊÔ»·¾³
  • deploy ½×¶Î£º²¿ÊðÏîÄ¿µ½Õýʽ»·¾³

¸ÅÄî

ҪʹÓÃfeflow£¬Ê×ÏÈÐèÒªÁ˽âÒÔϸÅÄ

  • ½ÅÊÖ¼Ü
  • ¿ª·¢Ì×¼þ
  • ²å¼þ

½ÅÊÖ¼Ü

ÔÚ²»ÉÙǰ¶ËÍŶÓÖУ¬¶¼´æÔÚÏîÄ¿¿ª·¢²»ÖÇÄܵÄÎÊÌâ¡£ºÜ¶à¿ª·¢Õß¿ª·¢ÐÂÏîÄ¿µÄʱºò¶¼ÊÇ»ùÓÚÔ­ÓÐÏîÄ¿¿½±´µÄ·½Ê½½øÐУ¬ÕâÑù¾ÍÔì³ÉÁËÒ»¸öÍŶÓÖв»Í¬ÈË¿ª·¢µÄÏîĿĿ¼½á¹¹¸÷²»Ïàͬ£¬ºóÐøÏîÄ¿½»½ÓºÍά»¤ÆðÀ´·Ñʱ·ÑÁ¦¡£ÎªÁ˽â¾öÕâ¸öÎÊÌ⣬Feflow ÒýÈëÁËÉçÇøÖ÷Á÷µÄ½ÅÊּܽøÐÐÏîÄ¿µÄ³õʼ»¯¡£½ÅÊּܶÔÓ¦µÄÊÇÏîĿģ°å£¬FelowµÄ½ÅÊּܻùÓÚYeoman£¬ÔÚËü»ù´¡ÉϽøÐÐÀ©Õ¹£¬»á½«±ê×¼»¯µÄÈÕÖ¾¡¢CLI¹¤¾ßº¯Êýͨ¹ýÉÏÏÂÎĶÔÏ󴫵ݸø½ÅÊּܣ»Í¬Ê±Ìṩ½ÅÊּܵÄÔöÁ¿¸üлúÖÆ£¬´´½¨ÏîĿʱ£¬µ±±¾µØ°æ±¾ºÍÔ¶³Ì°æ±¾²»¼æÈÝʱ»áÌáÉýÔöÁ¿¸üС£ÒýÈë½ÅÊÖ¼ÜÒÔºó£¬Ò»·½Ãæ¿ÉÒÔÈÃÍŶӱ£³ÖͳһµÄ¼¼ÊõÕ»ºÍͳһµÄĿ¼½á¹¹£»ÁíÒ»·½Ã棬»¹¿ÉÒÔÔÚÏîÄ¿³õʼ»¯µÄʱºò×öһЩ×Ô¶¯»¯µÄÊÂÇ飬±ÈÈç×Ô¶¯´´½¨Ô¶³ÌGIT²Ö¿â²¢·ÖÅ俪·¢Õßmaster/developerȨÏÞ¡¢ÉêÇë¼à¿ØID¡¢ÄÚ²¿CI/CDϵͳ¿ìËÙ´òͨµÈ¡£

¿ª·¢Ì×¼þ

ÏîÄ¿´´½¨ºÃÖ®ºó£¬½ÓÏÂÀ´µÄÎÊÌâ¾ÍÊDZ¾µØ¿ª·¢ºÍ´úÂë´ò°ü¹¹½¨ÁË¡£Í¨³£µÄ×ö·¨Êǽ«¹¹½¨½Å±¾Ö±½Ó·ÅÔÚÒµÎñÏîÄ¿ÀïÃæ£¬Ã¿¸öÒµÎñ¿ª·¢Õß¶¼¿ÉÒÔ¸ù¾Ý×Ô¼ºµÄÐèÇó×ÔÐÐÐ޸ģ¬ÕâÑùµ¼ÖµÄÎÊÌâÊÇÿ¸öÏîÄ¿µÄ¹¹½¨½Å±¾¶¼´æÔÚ²îÒ죬¹¹½¨²»Í³Ò»£¬Í¬Ê±Ã¿¸öÏîÄ¿¶¼ÐèÒªÖØ¸´°²×°¹¹½¨ÒÀÀµ¡£Feflow ÒýÈëÁË¿ª·¢Ì×¼þÕâ¸ö¸ÅÄËüµÄ»ù±¾Ë¼ÏëÊǽ«¹¹½¨½Å±¾½øÐÐͳһ¹ÜÀí£¬ÓÉÍŶÓÀïÃæÊìϤ¹¹½¨µÄͬѧ½øÐÐͳһµÄά»¤¡£¿ª·¢Ì×¼þÐèÒª·¢²¼µ½ npm ÉϽøÐа汾¹ÜÀí£¬Í¬Ê±½¨Òéÿ¸öÏîÄ¿²ÉÓÃÏàͬµÄ¿ª·¢Ì×¼þ¡£¿ª·¢Ì×¼þͨ¹ý feflow °²×°ºó»á´æ·ÅÔÚ ~/.feflow/node_modulesÏ£¬ÕâÑùÿ¸öÏîÄ¿¶¼¿ÉÒÔ¹²ÓÃÒ»Ì×¹¹½¨½Å±¾ÁË¡£¿ª·¢Ì×¼þËü½«ÏîÄ¿µÄ¹¹½¨¡¢²¿Êð¡¢´úÂë¼ì²éµÈ¹¦Äܶ¼ÕûºÏÔÚÒ»Æð£¬²¢ÇÒÌ×¼þ»á¸úËæÏîĿһÆð×ߣ¬´æ´¢ÔÚÏîÄ¿µÄ node_modules Àï¡£°Ñ¹¹½¨µÄ´úÂë³éÀë³öÏîÄ¿ÐÎ³ÉµÄ NPM °ü¡£ÕâÑù×öµÄºÃ´¦ÔÚÓÚ£¬ÍŶÓÄÚ²¿µÄÏîÄ¿Óöµ½¹¹½¨¹¤¾ßÉý¼¶µÄʱºò£¬ÎÞÐè¶Ôÿ¸öÏîÄ¿¶¼½øÐÐÒ»±éÉý¼¶£¬Ö»ÐèÒªÉý¼¶¿ª·¢Ì×¼þ²¢¸ü¸ÄÏîÄ¿ÖÐ .feflowrc.json ÖеÄÅäÖü´¿É

Ì×¼þ¼ÓÔØ»úÖÆ

Èç¹ûÄãÔÚij¸öÒµÎñÏîÄ¿ÏÂÔËÐÐ Feflow µÄÃüÁÕâ¸öʱºò Feflow µÄÃüÁî¼ÓÔØ»úÖÆÊÇ£º³õʼ»¯ Feflow -> ¼ÓÔØÔ­ÉúÃüÁî -> ¼ÓÔØ²å¼þÃüÁî -> ¼ÓÔØÌ×¼þÃüÁî¡£ÆäÖУ¬Ì×¼þµÄ¼ÓÔØ»úÖÆ·ÖΪÏîÄ¿ÅäÖÃÎļþ¼ÓÔØºÍÌ×¼þÃüÁî×¢²áÁ½¸ö²½Öè¡£Ê×ÏÈ Feflow »á¶ÁÈ¡ÏîÄ¿ÅäÖÃÎļþ£¬ÏîÄ¿ÎļþÃû³Æ¿ÉÒÔÊÇ£º.feflowrc.js, .feflowrc.yaml, .feflowrc.yml, .feflowrc.json, .feflowrc, package.json ÖеÄÒ»¸ö¡£ÔÚÕâ¸öÅäÖÃÎļþÀïÃæ»áÃèÊöÕâ¸öÏîĿӵÓеÄÌ×¼þÃüÁîºÍÌ×¼þÃüÁî¶ÔÓ¦µÄ npm °üµÄʵÏÖÓ³Éä¹ØÏµ

²å¼þ

³ýÁËÌṩ»ù´¡µÄ¹¦ÄÜÖ®Í⣬FeflowÀïÃæ»¹Í¨¹ýÒ»Ìײå¼þ»úÖÆÈ¥·½±ãµÄÀ©Õ¹×ÓÃüÁî¡£Äã¿ÉÒÔÀûÓòå¼þÈ¥×öºÜ¶à×Ô¶¯»¯µÄÊÂÇ飬±ÈÈçÅúÁ¿Ñ¹ËõͼƬ¡¢´î½¨ÔËÓª»î¶¯±¾µØ¿ª·¢SDK¡¢´úÂëͳ¼Æ¹¦Äܵȵȡ£ÓÐһЩ³£ÓõÄÃüÁîÊDz»ÒÀÀµÏîÄ¿¿ò¼ÜµÄ£¬¾Í³éÏó³É²å¼þ¡£

ÃüÁîÉè¼Æ

Feflow ½«ÃüÁî»®·ÖΪ3À࣬·Ö±ðÊÇ£º

  1. ÆÕͨÃüÁFeflow Ô­ÉúʵÏÖµÄÃüÁҲ¾ÍÊÇÄÚÖÃÃüÁî
  2. ¿ª·¢Ì×¼þÃüÁÏîĿά¶ÈµÄÃüÁ²»Í¬µÄÏîÄ¿ÀàÐÍÏÂÃüÁî»ò¶à»òÉÙ´æÔÚ²îÒ죬ÓÉ¿ª·¢Ì×¼þÌṩ¡£
  3. ²å¼þÃüÁͨ¹ý²å¼þ½øÐÐÀ©Õ¹µÄÃüÁ²å¼þÃüÁî¸ü¾ßÆÕÊÊÐÔ£¬Óɲå¼þÌṩ¡£

Feflow °²×°

Ê×ÏÈÈ«¾Ö°²×°feflow£¬½Ó×Åͨ¹ýfeflow initÑ¡ÔñÏà¹ØµÄ½ÅÊּܴ´½¨ÏîÄ¿¡£Ò²¿ÉÒÔͨ¹ýfeflow install°²×°×Ô¶¨ÒåµÄ²å¼þºÍ½ÅÊּܣ¬Èç¹û¹Ù·½ÌṩµÄ½ÅÊּܼÓÔØµÄÄ£°å²»·ûºÏ×Ô¼ºµÄÒµÎñ£¬¿ÉÒÔ×ÔÐпª·¢Ò»¸ö½ÅÊּܡ£

Feflow CLI °²×°
npm i feflow-cli -g

½ÅÊּܰ²×°

Feflow µÄºËÐIJ¿·Ö²¢Ã»ÓÐÒ»¸ö½ÅÊּܣ¬½ÅÊּܶ¼ÊÇͨ¹ý Feflow À´°²×°µÄ£¬ÎªÁË¿ìËÙÉÏÊÖ£¬ÎÒÃÇÏÈÓÃÒÑÓеĽÅÊÖ¼ÜÀ´´´½¨ÏîÄ¿£¬Ñ¡Ôñgenerator-ivwebÄ£°å´´½¨ÏîÄ¿

feflow install generator-ivweb
feflow init

ÖªµÀÈçºÎʹÓú󣬽ÓÏÂÀ´ÊÇ×îÖØÒªµÄ»·½Ú£¬ÈçºÎ½ÓÈëfeflow£¬¿ª·¢ÊôÓÚÎÒÃÇ×Ô¼ºµÄ½ÅÊּܣ¬¿ª·¢Ì×¼þºÍ²å¼þ

Feflow ¿ª·¢½ÓÈë

½ÓÈëfeflow£¬Ê×ÏÈÐèÒª½«ÈÕ³£µÄÒ³Ãæ½øÐгéÏó£¬ÐγɽÅÊÖ¼ÜÄ£°å£¬½Ó׎«ÏîÄ¿¿ª·¢ÖÐÓõ½µÄÃüÁî·â×°³É¿ª·¢Ì×¼þ£¬Í¬Ê±£¬¿ÉÒÔ½«Ò»Ð©Í¨ÓõŦÄÜ·â×°³É²å¼þ£¬±ÈÈçͼƬÉÏ´«¡£

  • ¿ª·¢Ä£°å½ÅÊÖ¼Ü
  • ʵÏÖ¿ª·¢Ì×¼þ
  • ʵÏÖ²å¼þ

ʵÏÖÒµÎñÄ£°å

FelowµÄ½ÅÊּܻùÓÚYeoman£¬ÔÚËü»ù´¡ÉϽøÐÐÀ©Õ¹£¬¿ª·¢Yeoman ½ÅÊּܿÉÒԲο¼¹ÙÍø£ºhttps://yeoman.io/authoring/

×¼±¸¹¤×÷

°²×°Yoeman£¬È«¾Ö°²×° yo ºÍ generator-generator£º

npm install yo generator-generator

Éú³É½ÅÊÖ¼ÜÄ£°æ

yo generator

Éú³É¹ý³ÌÖÐѯÎ浀 Description Ò»¶¨ÒªÌîд£¬ÕâÀï»á¹ØÁªµ½½ÅÊÖ¼ÜÏîĿϠpackage.json ÎļþµÄ description ×ֶΣ¬Feflow »áʹÓÃËüÀ´Ìṩ½ÅÊÖ¼Ü˵Ã÷¡£Éú³É³öÀ´µÄ½ÅÊÖ¼ÜÄ£°æµÄÏîÄ¿ÃûÊÇÒÔ generator- ¿ªÍ·µÄ£¬Èç¹ûÄã×Ô¼ºÊÖ¶¯´´½¨Ò»¸ö½ÅÊּܣ¬ÕâÒ²ÊDZØÐëµÄ¡£

Éú³ÉµÄ½ÅÊÖ¼ÜÄ£°æµÄÖ÷ҪĿ¼½á¹¹£º

´´½¨×Ô¼ºµÄ½ÅÊÖ¼Ü

ÏîĿģ°æ£ºÃ¿¸öÏîÄ¿¶¼ÓÐ×Ô¼ºµÄÏîĿĿ¼½á¹¹¹æ·¶£¬×ª»»³É Yeoman ½ÅÊּܵÄÏîĿģ°æºÜ¼òµ¥£¬Ö±½ÓÕÒ¸öÏîÄ¿»òÕß°ÑÏîĿģ°æ¸´ÖÆÕ³Ìùµ½ generators/templates/Ï¡£

¶ÔÓÚ¸öÈË»òÕß»¹Ã»ÓÐÏîĿģ°æµÄÍŶÓÀ´Ëµ£¬Ê×ÒªÈÎÎñµ±È»Êǹ滮ºÃ×Ô¼ºµÄÏîĿģ°æÁË¡£ÔÚ±¾ÎÄʾÀýÖУ¬ÎÒÃǽ«´´½¨Ò»¸ö·Ç³£¼òµ¥µÄ¡¢Ö§³Ö React µÄÏîĿģ°æ¡£

ÆäÖÐ.feflowrc.jsonÎļþÊÇ¿ª·¢Ì×¼þÏà¹ØµÄÃüÁîÅäÖÃÎļþ£¬×÷ΪÏîÄ¿ºÍ Feflow µÄÇÅÁº£¬Feflow »á¶ÁÈ¡ÆäÖеÄfeflowÃüÁîÅäÖÃÀ´Ö´ÐÐÏìÓ¦µÄÃüÁî¡£

¶¯Ì¬Ä£°æÄÚÈÝ

Yeoman Ä£°æÖ§³Ö <%= variable > ÕâÑùµÄÓï·¨À´Ìî³ä¶¯Ì¬ÄÚÈÝ£¬variable ÊÇͨ¹ýYeoman´«µÝ½øÀ´µÄ¡£Èç¹ûÄãÏëÔÚÄãµÄÏîĿģ°æÖмÓÈ붯̬µÄÄÚÈÝ£¬ÀýÈç¸ù¾ÝѯÎÊÓû§µÃµ½µÄ´ð°¸À´Ìî³äÏîÄ¿Ãû³Æ£¬Äã¾Í¿ÉÒÔÔÚÏîĿģ°æÏ嵀 package.json ÖÐÕâÑùд£º

{
"name" : "<%-name %>" ,
"version: " 1.0.0 ",
" descriptiton ": " <%-descriptiton %> "
}

ÏîÄ¿Éú³ÉÂß¼­

ÓÐÁËÏîĿģ°æÖ®ºó£¬ÎÒÃÇ»¹È±ÉÙ¸ù¾ÝÏîĿģ°æ´´½¨Ò»¸öÏîÄ¿µÄÂß¼­¡£×î¼òµ¥Âß¼­¾ÍÊǸ´ÖÆÒ»·ÝÄ£°æµ½µ±Ç°Ä¿Â¼Ï£¬ ¸ß¼¶µãµÄ½ÅÊÖ¼ÜÒ»°ã¶¼»áÓÐÈçϹý³Ì£º

  1. ѯÎʲ¢½ÓÊÕÓû§µÄÊäÈ룻
  2. Ö´ÐÐһЩ×Ô¶¨ÒåµÄ½Å±¾£»
  3. ¸ù¾ÝÓû§ÊäÈëºÍ½Å±¾Ö´ÐеĽá¹ûäÖȾÏîĿģ°æ£¬²¢Éú³ÉÓÚµ±Ç°Ä¿Â¼Ï¡£
  4. ÉÏÊöµÄÕâЩÂß¼­Í³Í³¶¼Ð´ÔÚ generators/app/index.js ÎļþÖС£Í¨³£À´Ëµ£¬Õâ¸öÎļþ¶¼Âú×ãÈçͼ¸ñʽ£º
const Generator = require ( 'yeoman-generator' );
module .exports = class extends Generator {
// ³õʼ»¯½×¶Î
initializing(){ /* code */ }
//½ÓÊÕÓû§ÊäÈë½×¶Î
prompting(){ /* code */ }
//±£´æÅäÖÃÐÅÏ¢ºÍÎļþ
configuring (){ /* code */ }
// Ö´ÐÐ×Ô¶¨Ò庯Êý½×¶Î
default (){ /* code */ )
//Éú³ÉÏîĿĿ¼½×¶Î
writing () { /* code */ }
//ͳһ´¦Àí³åÍ»£¬ÈçÒªÉú³ÉµÄÎļþÒѾ­´æÔÚÊÇ·ñ¸²¸Ç
conflicts (){ /* code */ }
// °²×°ÒÀÀµ½×¶Î
install (){ /* code */ }
// ½áÊø½×¶Î
end () { /* code */ }
}

ÕâÀïÎÒÃÇÔÚ´´½¨ºÃÏîÄ¿Îļþºó£¬³õʼ»¯git²Ö¿â£¬²¢Ôö¼ÓÒ»ÌõgitÌá½»¼Ç¼¡£

const Generator = require ( 'yeoman-generator' );
const chalk = require ( 'chalk' );
const yosay = require ( 'yosay' );
const simpleGit = require ( 'simple-git' );
module .exports = class extends Generator {
prompting() {
this .log(
yosay( `»¶Ó­Ê¹Óà ${chalk.red( 'generator-h-5-project' )} generator!` )
);
return this .prompt([
{
type : "input" ,
name : "name" ,
message : "ÇëÊäÈëÏîĿĿ¼Ãû£¨Ó¢ÎÄ£©" ,
default : "demo"
},
{
type : "input" ,
name : "remote" ,
message : "ÇëÊäÈëÔ¶³Ì²Ö¿âµØÖ·" ,
default : "ÏîÄ¿»ù±¾ÃèÊö"
}
]).then( answers => {
this .answers = answers;
});
}
writing() {
const { name } = this .answers;
this .destinationRoot( this .destinationPath(name));
this .fs.copyTpl(
` ${ this .templatePath()} /**/!(_)*` ,
this .destinationPath(),
this .answers,
{},
{ globOptions : { dot : true } } // Copy all dots files.
);
}
install() {
console .log( "°²×°ÒÀÀµ£¬¹ý³Ì³ÖÐø1~2·ÖÖÓ" );
this .yarnInstall();
}
async end(){
const { name, remote } = this .answers;
console .log( "±¾´Î³õʼ»¯¹ý³Ì½áÊø, Çëͨ¹ýÒÔÏÂÃüÁîÔËÐÐÏîÄ¿: " );
console .log();
console .log(chalk.cyan( " cd" ), name);
console .log( ` ${chalk.cyan( "feflow dev:±¾µØµ÷ÊÔ" )} ` );
console .log( ` ${chalk.cyan( "feflow commit:´úÂëÌá½»" )} ` );
console .log( ` ${chalk.cyan( "feflow build:±¾µØ¹¹½¨" )} ` );
console .log( ` ${chalk.cyan( "feflow deploy:·¢²¼Õýʽ»·¾³" )} ` );
console .log();
console .log( "±àÂëÓä¿ì!" );
// ³õʼ»¯git²Ö¿â£¬²¢Ôö¼ÓÒ»ÌõÌá½»¼Ç¼
const git = simpleGit({
baseDir : this .destinationPath()
});
await git.init().addRemote( 'origin' , remote);
await git.add( '.' );
await git.commit( 'feature:first commit' )
}
};

½ÅÊּܵ÷ÊÔ

ÏÖÔÚ£¬ÄãµÄ½ÅÊּܾͶ¨ÖƺÃÁË£¬ÈÃÎÒÃÇÀ´ÊÔÒ»ÊÔ°É¡£ÏȰ²×°ÔÚ Feflow Ö÷Ŀ¼ÏÂ

cd <your-path>/generator-startkit-demo(Äã±¾µØ½ÅÊּܿª·¢Ä¿Â¼)
npm link
cd ~/.feflow
npm link generator-startkit-demo£¨ÄãµÄ½ÅÊּܰüÃû~½ÅÊּܿª·¢Ä¿Â¼Àïpackage.jsonÀïµÄnameÊôÐÔ£©
ÐÞ¸Ä ~/.feflow/package.jsonÀïµÄdependencies£¬°ÑÄãµÄ½ÅÊּܰüÃûд½øÈ¥£¬°æ±¾ºÅËæ±ãд
feflow init //¾Í¿ÉÒÔ¿´µ½½ÅÊÖ¼Ü

½ÓÏÂÀ´¿´¿´Êµ¼ÊЧ¹û

½øÈëµ½´´½¨µÄĿ¼react_demo£¬¿ÉÒԲο´Ô¶³Ì²Ö¿âµØÖ·ÉèÖóɹ¦£¬Í¬Ê±ÐÂÔöÁËÒ»ÌõÌá½»¼Ç¼

ʵÏÖ¿ª·¢Ì×¼þ

¿ª·¢Ì×¼þÓÃÓÚÌṩijÖÖÀàÐ͵ÄÏîÄ¿µÄÃüÁͨ³£ÊÇÌṩ¶à¸öÃüÁîµÄ¼¯ºÏ¡£FeflowµÄ¿ª·¢Ì×¼þÐèÒªÒÔ feflow-devkit-* ¿ªÍ·£¬¿ª·¢Ì×¼þ¿ª·¢Íê³ÉÐèÒª·¢²¼µ½npm»òÕßnpm¡£ÕâÀïÎÒÃÇÖØµã¶ÔÈçºÎ¿ª·¢Ò»¸ö Feflow Ì×¼þ½øÐн²½â£¬ÒÔ feflow-devkit-demo ΪÀý¡£

ÅäÖà devkit.json Îļþ

Ê×ÏÈ£¬ÎÒÃÇÐèÒª´´½¨Ò»¸ö¿ÕÎļþ¼Ð£¬ÃüÃûΪ feflow-devkit-demo£¬²¢ÇÒÔÚÎļþ¼ÐÏÂн¨Ò»¸ö devkit.json »òÕß devkit.js Îļþ£¬ÒÔ devkit.json ΪÀý£¬ÅäÖÃÈçÏ£º

{
"devkit" : {
"commands" : {
"dev" : {
// dev ÃüÁî¶ÔÓ¦µÄÕæÕýʵÏֽű¾
"implementation" : "./lib/command/dev.js" ,
// dev µÄÃèÊö£¬»áÔÚ feflow -h µÄʱºòÏÔʾ³öÀ´
"description" : "¿ª·¢Ä£Ê½." ,
// dev µÄ×ÓÃüÁî
"optionsDescription" : {
// ¼òµ¥µÄÃüÁîÃèÊö
"p" : "Ñ¡Ôñ¶Ë¿Ú¹¹½¨" ,
// Ö§³Ö±ðÃû
"dist" : {
"description" : "¹¹½¨²úÎïĿ¼" ,
"alias" : "d"
}
}
},
"build" : {
"implementation" : "./lib/command/build.js" ,
"description" : "¹¹½¨Ò³Ãæ" ,
},
"deploy" : {
"implementation" : "./lib/command/deploy.js" ,
"description" : "¹¹½¨²¢·¢²¼Ò³Ãæ" ,
},
}
}
}

´´½¨ÃüÁî¶ÔÓ¦µÄʵÏÖÎļþ

ÅäÖúÃÁË devkit.json Îļþ£¬½ÓÏÂÀ´¾ÍÊÇһһʵÏÖÀïÃæ¶¨ÒåµÄ¸÷¸öÃüÁî¶ÔÓ¦µÄ½Å±¾¡£ÒÔ dev ÃüÁîΪÀý£¬Í¨¹ýÉÏÊö½Å±¾µØÖ·¿ÉÒÔÖªµÀÎÒÃÇÐèÒªÔÚ feflow-devkit-demo Ï´´½¨Ò»¸ö lib Îļþ¼Ð£¬È»ºóÔÚ lib Îļþ¼ÐÏ´´½¨ command Îļþ¼Ð£¬×îºóÔÚ command Îļþ¼ÓÏ´´½¨ dev.js Îļþ¡£µ±È»£¬Îļþ·¾¶¿ÉÒÔ×Ô¶¨Ò壬ÕâÑùµÄ´´½¨Îļþ¾Í°´ÕÕ×Ô¼º¶¨ÒåµÄ·¾¶È¥´´½¨¡£

dev.js ÎļþÐèÒªÏòÍⲿ±©Â¶Ò»¸öº¯Êý£¬µ±Ö´ÐÐ feflow dev µÄʱºòÆäʵ¾ÍÊÇÖ´Ðб©Â¶³öÀ´µÄº¯Êý£¬ÈçÏÂËùʾ£º

const buildDev = () => {
// ÕæÕýµÄ¹¹½¨½Å±¾
const devServer = require('../build/dev-server');

return devServer.then((response) => {
console.log('response', response);
})
.catch(error => {
console.log('error', error);
});
};
module.exports = buildDev;

¾ßÌå¹¹½¨µÄ½Å±¾´úÂëÊÇʲôÑù×Ó£¬¸ù¾Ý²»Í¬µÄ¹¹½¨ÐèÇó¾ö¶¨£¬ÎÒÃÇÕâÀï¾Í²»¼ÌÐøÕ¹Ê¾ÁË¡£

µ÷ÊԺͷ¢²¼

¿ª·¢ºÃÁËÌ×¼þ£¬¾ÍÒª¿ªÊ¼µ÷ÊÔÁË£¬ÕâÀïºÍÒÔǰ¹¹½¨Æ÷µÄµ÷ÊÔÓеãÇø±ð£¬ÄãÐèÒª½«Ì×¼þ npm link ÔÚÏîÄ¿µÄ node_modules ÀïÃæ£¬¶ø²»ÊÇ ~/.feflow µÄ node_modules ÀïÃæ£¬ÏîÄ¿Àïͨ¹ý .feflowrc.json ÎļþÀ´ÉùÃ÷ÏîÄ¿µÄÃüÁîËù¶ÔÓ¦µÄÌ×¼þÃüÁ¸ñʽÈçÏ£¨ÒÔ .js ¸ñʽµÄÎļþΪÀý£©

module .exports = {
// ±ØÐë
devkit : {
// ±ØÐ룬´ú±í×Å feflow µÄÃüÁî
commands : {
// ÍÆ¼ö£¬´ú±í×Å feflow dev µÄÃüÁî
dev : {
// ±ØÐ룬´ú±í×Å feflow dev ÃüÁî¶ÔÓ¦Ö´ÐеÄÌ×¼þÃüÁÕâÀï±íʾʹÓÃÌ×¼þ feflow-devkit-demo µÄ dev ÃüÁÅäÖøñʽΪ `<Ì×¼þ>:<ÃüÁî>`
builder : "feflow-devkit-demo:dev" ,
// ¿ÉÑ¡£¬Èç¹ûÉÏÊöÌ×¼þÃüÁîÖ§³ÖһЩÅäÖ㬿ÉÒÔдÔÚÕâÀï
options : {}
},
// ÍÆ¼ö£¬´ú±í×Å feflow build µÄÃüÁî
build : {
// ±ØÐ룬´ú±í×Å feflow build ÃüÁî¶ÔÓ¦Ö´ÐеÄÌ×¼þÃüÁÕâÀï±íʾʹÓÃÌ×¼þ feflow-devkit-demo µÄ build ÃüÁî
"builder" : "feflow-devkit-demo:build" ,
// ¿ÉÑ¡£¬Èç¹ûÉÏÊöÌ×¼þÃüÁîÖ§³ÖһЩÅäÖ㬿ÉÒÔдÔÚÕâÀï
"options" : {}
}
}
}
}

µ÷ÊÔ OK ºó¾Í¿ÉÒÔ·¢²¼ÁË¡£

ʵÏÖ²å¼þ

²å¼þÊÇΪÁËÀ©Õ¹¸ü¼ÑͨÓõÄ×ÓÃüÁî¶øÉè¼ÆµÄ£¬Feflow²å¼þÐèÒªÒÔ feflow-plugin-* ¿ªÍ·£¬²å¼þ¿ª·¢Íê³ÉÐèÒª·¢²¼µ½npm¡£½ÓÏÂÀ´£¬ÎÒÃÇʵÏÖÒ»¸ögit-commit Angular¹æ·¶µÄgitÌá½»ÃüÁîfeflow commit¡£µ±ÎÒÃÇÔÚÏîÄ¿ÏÂÖ´ÐÐ feflow commit µÄʱºò£¬¿ÉÒÔ×Ô¶¯Éú³ÉÒ»ÌõÌá½»¼Ç¼£¬²¢ÇÒ½øÐÐÍÆËÍ£¬ÊµÏÖµÄЧ¹û¸úÎÒÃÇÔÚÃüÁîÐÐÖ´ÐÐÒÔÏÂÃüÁîÏàËÆ

git add .
git commit ¨Cm 'feat:ÐÂÔöй¦ÄÜ'
git pull
git push

´´½¨ÏîÄ¿

´´½¨Ò»¸öÃûΪ feflow-plugin-commit µÄÎļþ¼Ð£¬²¢Óà npm init ÃüÁËü³õʼ»¯¡£×¢Ò⣬ËùÓÐ Feflow ²å¼þµÄÏîĿĿ¼Ãû¶¼±ØÐëÒÔ feflow-plugin- ¿ªÍ·£¬²¢ÇÒÏîÄ¿ÄÚµÄ package.json ÎļþÖÐµÄ name ×ֶαØÐëºÍÏîĿĿ¼Ãû±£³ÖÒ»Ö¡£

±àдÂß¼­,×¢²áÃüÁî

н¨Ò»¸ö index.js Îļþ£¬ÊµÏÖgit commitÂß¼­ ÔÚ±àд´úÂë֮ǰ£¬ÎÒÃÇÏÈÊáÀíÏÂÕûÌåµÄÂß¼­

¾ßÌåʵÏÖÈçÏ£º

feflow.cmd.register( 'commit' , 'git Ìá½»' , async function ( args ) {
// ÅжÏÊÇ·ñgitÏîÄ¿
if (!fs.existsSync(cwd( './.git' ))) return errorLog( 'µ±Ç°ÏîÄ¿²»ÊÇgitÏîÄ¿' );

// ¼ì²éÊÇ·ñÐèÒª commit »òÕß add
const { workDirHasFile } = await validateCommit();

// ÐèÒªpushµÄ»°£¬ÏÈÅжÏÊÇ·ñÓÐÔ¶¶Ë·ÖÖ§£¬ÇÒ±¾µØÊÇ·ñÂäºóÓÚÔ¶¶Ë
// ÊÇÔòÏÈÔÝ´æ(git stash)±¾µØÐ޸쬏üдúÂëºóÔÙ»Ö¸´ (git stash pop)

const [error] = await pullUpdates();
if (error) return ;
const answer = await inquirer.prompt(commitAnswers);
const commitMsg = getCommitMsg(answer);

await commit({
workDirHasFile,
commitMsg,
});

await push();
});

ÍêÕûµÄ´úÂë¿É²Î¿¼ÕâÀhttps://github.com/Yahiko7/feflow-plugin-commit

ÄãÎÞÐèµ£ÐÄ feflow ûÓÐÉùÃ÷»òÕßûÓÐÈκÎÄ£¿éµÄÒýÓã¬Feflow ÔÚʹÓÃÕâ¸ö²å¼þµÄʱºò£¬»á×Ô¶¯½« feflow ±äÁ¿×¢Èëµ½Èë¿ÚÎļþ£¨ÓÉ package.json ÖÐµÄ main ×ֶξö¶¨£¬ÕâÀïÊÇ index.js£©µÄÈ«¾Ö×÷ÓÃÓòÖС£

feflow.cmd.register º¯Êý½ÓÊÕÈý¸ö²ÎÊý£ºµÚÒ»¸öÊÇÏëÒª¸ø Feflow Ôö¼ÓµÄÃüÁîÃû³Æ µÚ¶þ¸öÊǶÔÕâ¸öÃüÁîµÄÃèÊö˵Ã÷ÐÅÏ¢£¨»áÔÚ feflow --help ÖÐÏÔʾ³öÀ´£© µÚÈý¸öÊÇÐÂÔöµÄÃüÁî¶ÔÓ¦µÄÖ´Ðк¯Êý¡£Ö´Ðк¯ÊýÖУ¬Feflow »á´«µÝÒ»¸ö²ÎÊý args£¬ËüÊÇÒ»¸ö¶ÔÏ󣬰üº¬×Å Feflow ÔËÐиÃÃüÁîʱËùÓÐÔÚ¸ÃÃüÁîºóµÄ²ÎÊý¡£ÀýÈ磬ÔËÐÐ feflow commit 1 2 3 ʱ£¬args ¾ÍÊÇ { _: [1, 2, 3] }¡£

²å¼þµ÷ÊÔ

½ØÖÁĿǰ£¬ÄãÒѾ­Íê³ÉÁËÒ»¸ö²å¼þ¡£Äã¿ÉÄÜÆÈ²»¼°´ýÏëÊÔÊÔ¡£±ð¼±£¬ÈÃÎÒÃÇÒ»²½Ò»²½À´¡£

cd <your-path>/feflow-plugin-commit
npm link
cd ~/.feflow
npm link feflow-plugin-commit

±à¼­ ~/.feflow/package.json Îļþ£¨¿ÉÓà vi ~/.feflow/package.json ±à¼­£©£¬ÔÚ dependencies ×Ö¶ÎÖÐÌí¼ÓÒ»ÐÐ "feflow-plugin-commit": "1.0.0"¡£ÔËÐÐ feflow commit ÆôÓòå¼þ¡£

Feflow Æô¶¯Ê±»á¼ÓÔØ ~/.feflow/node_modules ÀïÃæËùÓÐµÄ feflow-plugin-xx °üÌṩµÄÃüÁ²å¼þ»úÖÆµÄʵÏÖÀàËÆ Redux ºÍ Koa2 ÀïÃæµÄ compose »úÖÆ¡£²å¼þ¿ª·¢ºÃ²¢ÇÒ·¢²¼µ½ npm ºó£¬½ÓÏÂÀ´¾ÍÊDzå¼þ°²×°Ê¹ÓÃÁË¡£Í¨¹ýÒÔÏÂÃüÁî°²×°Ò»¸ö²å¼þ£º

$ feflow install <package>

Feflow »á½«²å¼þ°²×°ÔÚ ~/.feflow/node_modules Ï¡£

 

 
   
1791 ´Îä¯ÀÀ       27
Ïà¹ØÎÄÕÂ

Éî¶È½âÎö£ºÇåÀíÀôúÂë
ÈçºÎ±àд³öÓµ±§±ä»¯µÄ´úÂë
ÖØ¹¹-ʹ´úÂë¸ü¼ò½àÓÅÃÀ
ÍŶÓÏîÄ¿¿ª·¢"±àÂë¹æ·¶"ϵÁÐÎÄÕÂ
Ïà¹ØÎĵµ

ÖØ¹¹-¸ÄÉÆ¼ÈÓдúÂëµÄÉè¼Æ
Èí¼þÖØ¹¹v2
´úÂëÕû½àÖ®µÀ
¸ßÖÊÁ¿±à³Ì¹æ·¶
Ïà¹Ø¿Î³Ì

»ùÓÚHTML5¿Í»§¶Ë¡¢Web¶ËµÄÓ¦Óÿª·¢
HTML 5+CSS ¿ª·¢
ǶÈëʽC¸ßÖÊÁ¿±à³Ì
C++¸ß¼¶±à³Ì
×îл¼Æ»®
DeepSeekÔÚÈí¼þ²âÊÔÓ¦ÓÃʵ¼ù 4-12[ÔÚÏß]
DeepSeek´óÄ£ÐÍÓ¦Óÿª·¢Êµ¼ù 4-19[ÔÚÏß]
UAF¼Ü¹¹ÌåϵÓëʵ¼ù 4-11[±±¾©]
AIÖÇÄÜ»¯Èí¼þ²âÊÔ·½·¨Óëʵ¼ù 5-23[ÉϺ£]
»ùÓÚ UML ºÍEA½øÐзÖÎöÉè¼Æ 4-26[±±¾©]
ÒµÎñ¼Ü¹¹Éè¼ÆÓ뽨ģ 4-18[±±¾©]
 
×îÐÂÎÄÕÂ
ÈçºÎÉè¼Æ¸ßÀ©Õ¹µÄÔÚÏßÍøÒ³ÖÆ×÷ƽ̨
electronÈëÃÅÐĵÃ
ʹÓà Electron ¹¹½¨×ÀÃæÓ¦ÓÃ
VUE.JS×é¼þ»¯¿ª·¢Êµ¼ù
ÉîÈëÀí½âJSCore
×îпγÌ
HTML 5 + CSS3 Ô­ÀíÓ뿪·¢Ó¦ÓÃ
Webǰ¶Ë¸ß¼¶¹¤³Ìʦ±Ø±¸¼¼ÄÜʵս
Vue´óÐÍÏîÄ¿¿ª·¢ÊµÕ½
ReactÔ­ÀíÓëʵ¼ù
Vue.js½ø½×Óë°¸Àýʵ¼ù
³É¹¦°¸Àý
Öн»¼¯ÍÅ ¹¹½¨Web×Ô¶¯»¯²âÊÔ¿ò¼Ü
ijָÃûµçÐŹ«Ë¾ Vue.js½ø½×Óë°¸Àý
¹úµçÍ¨ÍøÂç¼¼Êõ HTML5+CSS3 +webǰ¶Ë¿ò
ÒÆ¶¯Í¨ÐÅ ÒÆ¶¯»¥ÁªÍøÓ¦Óÿª·¢Ô­Àí
ijµçÁ¦ÐÐ android¿ª·¢Æ½Ì¨×î¼Ñ