±à¼ÍƼö: |
±¾ÎĽ«½éÉÜÍŶÓÔÚǰ¶Ë¹¤³Ì»¯µÄʵ¼ù£¬Ö÷Òª²ÉÓÃ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À࣬·Ö±ðÊÇ£º
- ÆÕͨÃüÁFeflow ÔÉúʵÏÖµÄÃüÁҲ¾ÍÊÇÄÚÖÃÃüÁî
- ¿ª·¢Ì×¼þÃüÁÏîĿά¶ÈµÄÃüÁ²»Í¬µÄÏîÄ¿ÀàÐÍÏÂÃüÁî»ò¶à»òÉÙ´æÔÚ²îÒ죬ÓÉ¿ª·¢Ì×¼þÌṩ¡£
- ²å¼þÃüÁͨ¹ý²å¼þ½øÐÐÀ©Õ¹µÄÃüÁ²å¼þÃüÁî¸ü¾ßÆÕÊÊÐÔ£¬Óɲå¼þÌṩ¡£

Feflow °²×°
Ê×ÏÈÈ«¾Ö°²×°feflow£¬½Ó×Åͨ¹ýfeflow initÑ¡ÔñÏà¹ØµÄ½ÅÊּܴ´½¨ÏîÄ¿¡£Ò²¿ÉÒÔͨ¹ýfeflow install°²×°×Ô¶¨ÒåµÄ²å¼þºÍ½ÅÊּܣ¬Èç¹û¹Ù·½ÌṩµÄ½ÅÊּܼÓÔØµÄÄ£°å²»·ûºÏ×Ô¼ºµÄÒµÎñ£¬¿ÉÒÔ×ÔÐпª·¢Ò»¸ö½ÅÊּܡ£
Feflow CLI °²×°
½ÅÊּܰ²×°
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 |
Éú³É½ÅÊÖ¼ÜÄ£°æ
Éú³É¹ý³ÌÖÐѯÎ浀 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 %> "
} |
ÏîÄ¿Éú³ÉÂß¼
ÓÐÁËÏîĿģ°æÖ®ºó£¬ÎÒÃÇ»¹È±ÉÙ¸ù¾ÝÏîĿģ°æ´´½¨Ò»¸öÏîÄ¿µÄÂß¼¡£×î¼òµ¥Âß¼¾ÍÊǸ´ÖÆÒ»·ÝÄ£°æµ½µ±Ç°Ä¿Â¼Ï£¬ ¸ß¼¶µãµÄ½ÅÊÖ¼ÜÒ»°ã¶¼»áÓÐÈçϹý³Ì£º
- ѯÎʲ¢½ÓÊÕÓû§µÄÊäÈ룻
- Ö´ÐÐһЩ×Ô¶¨ÒåµÄ½Å±¾£»
- ¸ù¾ÝÓû§ÊäÈëºÍ½Å±¾Ö´ÐеĽá¹ûäÖȾÏîĿģ°æ£¬²¢Éú³ÉÓÚµ±Ç°Ä¿Â¼Ï¡£
- ÉÏÊöµÄÕâЩÂ߼ͳͳ¶¼Ð´ÔÚ 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 Ï¡£
|