ǰÑÔ£º±¾ÈËÓÚ
2014 Äêµ×¿ªÊ¼¹©Ö°ÓÚ°Ù¶ÈÌù°É£¨ÒÔϼò³Æ¡°Ìù°É¡±£©¡£Ìù°É×÷ΪÖйú×î´ó¹æÄ£µÄ UGC ²úÆ·Ö®Ò»£¬ÔÚPCºÍÒÆ¶¯¶ËÉϳÐÔØÁËÊýÒÚÓû§µÄ·ÃÎÊ¡£ÔÚ¹ýȥʮ¼¸ÄêµÄÔËÓªÖУ¬Ìù°É»ýÀÛÁËÊ®·Ö¸´ÔÓµÄÒµÎñģʽ¡£ÔÚ
Web ǰ¶Ë£¬Ò»¶ÈÓг¬¹ý40Ãû¹¤³Ìʦͬʱ¿ª·¢¡¢Ìá½»ºÍÉÏÏߣ¬Îª´Ë£¬Ìù°É½¨ÉèÁ˷dz£¸´ÔÓºÍÍ걸µÄ¿ª·¢Ìåϵ¡£µ«Ëæ×ÅÒµ½ç¼¼ÊõµÄ²»¶Ï½ø²½£¬Ìù°ÉµÄ¼¼Êõ¼Ü¹¹Ò²ÔÚ²»¶Ï³¢ÊԺ͵÷Õû£¬ÎÒÃÇÔڴ˹ý³ÌÖÐÒ²²»¶ÏÔâÓöÁËеÄÌôÕ½£¬ÏàÓ¦µØÒ²¾ÍÒý³öÁ˱¾ÎĵÄÄÚÈÝ£¬¶øËüµÄÒâÒåÔ¶Ô¶²»ÏÞÓÚÌù°ÉÕâÒ»²úÆ·±¾Éí¡£
Ò»¡¢±³¾°
ÏîÄ¿¹¹½¨£¬»òÕß³ÆÖ®Îª±àÒ룬ÔçÒѾ³ÉΪÁË Web ǰ¶ËÏîÄ¿ÔÚ·¢²¼¹ý³ÌÖеÄÒ»¸ö±Ø²»¿ÉÉٵĻ·½Ú¡£´Ó×îÔçµÄ JavaScript
Óë CSS ѹËõºÏ²¢£¬·¢Õ¹µ½½ñÌì ES2015¡¢ES2016¡¢Less¡¢Sass µÈÔ¤´¦ÀíÓïÑÔµÄת»»£¬¹¹½¨µÄѹÁ¦Ô½À´Ô½´ó£¬ÆäÁ÷³ÌÒ²Ô½À´Ô½¸´ÔÓ£¬¼òµ¥µÄ
Shell¡¢Make¡¢Ant µÈµ¥´¿µÄÈÎÎñ´¦Àí¹¤¾ßÔçÒѾ²»ÄܺܺõØÂú×ãÐèÇó£¬Ò»¸öÊÇЧÂÊÎÊÌ⣬һ¸öÊÇ¿ÉÀ©Õ¹ÐÔÎÊÌâ¡£Òò´Ë£¬Òµ½çÒÀÍÐ
NodeJS£¬·¢Õ¹³öÁ˶à¸öÓÅÐãµÄ¿ªÔ´¹¹½¨¹¤¾ß£¬ËüÃÇÓеÄרעÓÚ Web ǰ¶ËÏîÄ¿¼¯³É»¯£¬Ìṩ¼òµ¥Ò×Óõıà³Ì½Ó¿Ú£¬ÓеÄרעÓÚÈáÈÍÐÔ£¬ÈÝÒ×À©Õ¹£¬ÒѾ²»ÔÙ½ö½ö¾ÖÏÞÓÚÄÜ´¦ÀíÌØ¶¨µÄÏîÄ¿ÀàÐÍ¡£
µ«ÊÇ£¬Ëæ×ÅÏîÄ¿¸´ÔӶȵÄÌáÉý£¬ÕâЩ¹¹½¨¹¤¾ßÒ²»áÂýÂý±©Â¶³öһЩ²»×㣬Ö÷ÒªÌåÏÖÔÚÐÔÄܺÍЧÂÊÉÏ£¬Õâ»áÈÃÔ±¾ÒѾÓÉÓÚ¸´ÔÓµÄÁ÷³Ìµ¼ÖµÄÂý¹¹½¨Ñ©ÉϼÓ˪¡£±¾ÎÄÒÔÒ»¸öͬ¹¹
JavaScript Ó¦ÓÃΪÀý£¬À´ËµÃ÷µäÐ͵ĴóÐ͸´ÔÓǰ¶ËÏîÄ¿¹¹½¨ÖÐÓöµ½µÄЧÂÊÆ¿¾±ÒÔ¼°½â¾öÎÊÌâµÄһЩ˼·¡£Í¬¹¹
JavaScript Ó¦ÓõÄÌØµãÊÇ£¬Í¬Ò»·Ý JavaScript Ô´´úÂë¼ÈÐèÒªÔËÐÐÔÚ NodeJS ·þÎñ¶Ë£¬ÓÖÐèÒªÔËÐÐÔÚä¯ÀÀÆ÷¿Í»§¶Ë£¬Í¬Ê±»¹Òª¿¼Âǵ½ÆäËü¾²Ì¬×ÊÔ´Èç
CSS¡¢Í¼Æ¬ºÍ¶àýÌå¡£
ÏÂͼÊǸÃÏîÄ¿¹¹½¨Á÷³ÌµÄÒ»¸ö¼ò»¯°æ±¾£¬¿ÉÒÔ¿´µ½£¬²»Í¬À´Ô´µÄ JavaScript Îļþ¶¼ÓÐÁ½¸ö¹¹½¨·ÖÖ§£¬¼´Á÷³Ì·Ö½â£¬²¢ÇÒ»¹´æÔÚ²»Í¬Ô´ÎļþµÄ¹¹½¨Á÷³ÌºÏ²¢µÄÇé¿ö¡£´ËÍ⣬¶ÔÓÚ²»ÐèÒªÈκι¹½¨»·½ÚµÄÆäËü£¨ÒÅÁôµÄ£©Îļþ£¬±ÈÈç¿ÉÄܵÄÅäÖÃÎļþ¡¢¶þ½øÖƾ²Ì¬×ÊÔ´Îļþ¡¢×Ô¶¨ÒåÎļþÀàÐ͵ȵȣ¬ÎÒÃÇÒªÇóËüÃÇÖ»Óп½±´µ½Ä¿±êĿ¼¾Í¿ÉÒÔÁË¡£ÒÔ´ËΪÀý£¬²¢¿¼Âǵ½ÐÔÄܺÍЧÂÊÎÊÌ⣬ÎÒÃǶԹ¹½¨¹¤¾ßµÄ×îµÍÒªÇó°üÀ¨£º

Ö§³Ö¶ÔÈÎÒâÎļþµÄÈÎÒâÊýÁ¿¡¢ÈÎÒâÁ÷³ÌµÄ¹¹½¨£ºWeb ǰ¶ËÏîÄ¿µÄ¼Ü¹¹±ä»ÃÎÞÇÏà¶ÔÓ¦µÄ¹¹½¨Á÷³Ì¿ÉÄÜÊÇÈÎÒâµÄ£¬²¢ÇÒÎÞ·¨Ô¤²â£¬ÊÂʵÊÇ£¬ÎÒÃǵÄǰ¶Ë¼Ü¹¹È·Êµ¶àÖÖ¶àÑù¡£ÈçÉÏͼÖУ¬²»Í¬ÎļþµÄ¹¹½¨Á÷³ÌÒѾ²»ÔÙÊǵ¥´¿µÄƽÐÐÐòÁÐͼ£¬¶øÊÇÒ»¸öÓÐÏòµÄÍØÆËͼ¡£Õâ¾ÍÒªÇó¹¹½¨¹¤¾ß¶ÔÁ÷³ÌµÄ¶¨ÖƷdz£Áé»î£¬Ö»ÒªÊǺÏÀíµÄ£¨°üÀ¨µ«²»ÏÞÓÚ²»º¬ÓÐÏò»·£©£¬¾ÍÓ¦¸Ã¿ÉÒÔʵÏÖ¡£
Ö§³ÖÎļþ¼¶±ðµÄ¹¹½¨ÔöÁ¿£º¹¹½¨·ÖΪȫÁ¿¹¹½¨ºÍÔöÁ¿¹¹½¨£¬¹ËÃû˼Ò壬ȫÁ¿¹¹½¨ÊÇÍêÈ«´ÓÔ´Îļþ¶ÁÈ¡ºó½øÐй¹½¨£¬ÔöÁ¿¹¹½¨Îª½ö¹¹½¨×îÉٵıØÒªÎļþ£¬ÊÇÈ«Á¿¹¹½¨Ö®ºóÓ¦¶Ô²¿·ÖÎļþ±»ÆäËü½ø³ÌÐ޸ĵIJßÂÔ¡£Ïà±ÈÓÚÈ«Á¿¹¹½¨£¬ÔöÁ¿¹¹½¨ÔÚËÙ¶ÈÉÏÓÐÏÔÖøµÄÓÅÊÆ£¬Í¨³£ÓÃÓÚ¿ª·¢Õß±¾µØµÄʵʱԤÀÀºÍ²¿Êð£¬ÌáÉý¿ª·¢Ð§ÂÊ¡£ÔöÁ¿¹¹½¨ÒªÇ󾡿ÉÄܱÜÃâ²»±ØÒªµÄÎļþ¹¹½¨£¬Í¬Ê±ÒªÇó¶ÔÓÚ¿ÉÄÜÊÜÓ°ÏìµÄËùÓÐÎļþ£¬¶¼±ØÐëÁ¬´ø¹¹½¨£¬±£Ö¤ÊµÊ±ÐÔ¡£
Ö§³ÖÒÅÁôÎļþµÄÌáÈ¡£º¹¹½¨Ò»°ãÊÇÕë¶ÔÌØ¶¨ÀàÐ͵ÄÎļþµÄ£¬Õâͨ¹ýö¾ÙÀ´ÊµÏÖ¡£ÔÚÏîÄ¿ÖУ¬ÍùÍù»¹´æÔÚ×ÅһЩÄÑÒÔö¾ÙµÄÎļþ×ÊÔ´£¬ÕâЩ×ÊÔ´¿ÉÄܲ»ÐèÒªÈκδ¦Àí£¬Ö»Òª±£Ö¤ÔÚÏîÄ¿¹¹½¨Ö®ºó±£ÁôÔÑù¼´¿É£¬°üÀ¨ÎļþÄÚÈݺÍÎļþ·¾¶¡£ÈçºÎÐèÒª¶ÔËüÃÇÒ²½øÐй¹½¨²Ù×÷£¬Ôò²»±Ø°¤¸öÖ´ÐÐÎļþÑ¡Ôñ£¬ÒòΪÕâ¿ÉÄܷdz£·±Ëö¡£
ÏÂÃæÎÒÃÇÏÈÌÖÂÛÏÖÓпªÔ´¹¹½¨¹¤¾ßÔÚÂú×ãÒÔÉÏÐèÇóʱµÄ²»×ãÖ®´¦£¬ÔÙÏë·½Éè·¨ÓèÒԸĽø¡£
¶þ¡¢ÏÖÓз½°¸
Web ǰ¶ËÁìÓò³£Óõļ¸¿î¹¹½¨¹¤¾ß£¬°üÀ¨ Grunt¡¢Gulp¡¢Webpack¡£
Grunt ×ÊÀú×îÉÒò´ËÒ²·¢Õ¹³öÁ˷dz£·±ÈٵIJå¼þÉú̬¡£Ëü»ùÓÚ glob Ñ¡ÔñÎļþ¼¯ºÏ²¢Ö´ÐÐÅäÖúõĹ¹½¨Á÷³Ì¡£Grunt
ÊÇ»ùÓÚÎļþ¹¹½¨µÄ£¬Òò´ËÔÚ¹¹½¨ÖеÄÿһ¸ö»·½Ú¶¼±ØÐë¶ÁÈ¡ºÍдÈë´ÅÅÌÎļþ£¬ÕâÊÇ Grunt ×îΪÈËÚ¸²¡µÄµØ·½£¬ÒòΪÕâÒâζÄãÒªÏë°ì·¨ÎªÃ¿Ò»¸ö¹¹½¨»·½ÚÉè¼ÆÎļþµÄÊäÈëÊä³öĿ¼£¬±£Ö¤²»ÓëÆäËüÁ÷³Ì·¢³ö³åÍ»£»ÔÙÒ»µã¾ÍÊǶÁȡдÈë´ÅÅÌÎļþ¹ýÓÚÏûºÄʱ¼ä£¬µ¼ÖÂ
Grunt ÔÚ¹¹½¨´óÐ͸´ÔÓÏîĿʱ±È½Ï»ºÂý¡£ÔÚÔöÁ¿¹¹½¨ÉÏ£¬Grunt´ó¶àÒÔ¡°ÈÎÎñ¡±Îªµ¥Î»£¬ÕâÆäÖлá°üº¬ºÜ¶à²»±ØÒªÎļþµÄ¹¹½¨¡£³ý·ÇÔÚ±ØÒªµÄ»·½ÚÖÐÊÖ¶¯Éè¼Æ»º´æ£¬·ñÔò
Grunt Ò²²»ÏÔʽ֧³Ö»º´æ¡£´ËÍ⣬Grunt ²»ÄÜÌáÈ¡ÒÅÁôÎļþ¡£
Gulp Óë Grunt ±È½ÏÀàËÆ£¬¶¨Î»Ò²½üºõÏàͬ£¬Óë Grunt µÄ×î´óµÄ²»Í¬ÊÇ Gulp ÊÇ»ùÓÚÁ÷£¨Stream£©¹¹½¨µÄ¶ø²»ÊÇÎļþ¡£Õâ¸öÌØÐÔ½ÚÊ¡Á˶ÔÎļþµÄ´óÁ¿´ÅÅ̶Áд²Ù×÷£¬Ê¹µÃ
Gulp µÄ¹¹½¨ËÙ¶ÈÓÐÁËÃ÷ÏÔµÄÌáÉý¡£¸üÖØÒªµÄÊÇ£¬Gulp ¿ÉÒÔÈù¹½¨Á÷³ÌÅäÖÃÆðÀ´¸üÇåÎú¼òµ¥£¬Ö§³ÖÁ÷³Ì·Ö½â£¬µ«²»Ö§³ÖÁ÷³ÌºÏ²¢¡£Gulp
Ò²ÓÐÓë Grunt Ò»ÑùµÄÔöÁ¿¹¹½¨Á£¶ÈµÄÎÊÌ⣬ͬʱҲ²»ÄÜÌáÈ¡ÒÅÁôÎļþ¡£
Webpack ÓëÆä˵Êǹ¹½¨¹¤¾ß£¬µ¹²»Èç˵ÊÇÄ£¿é´ò°üÆ÷£¬¹Ù·½µÄ˵·¨ÊǽÐ×ö ¡°Module Bundler¡±¡£ËüÓë
Gulp ºÍ Grunt ²¢Ã»ÓÐÌ«¶à¿É±ÈÐÔ£¬Ò²²»ÄܺܺõØÍê³ÉÎÒÃǵÄÈÎÎñ¡£µ« Webpack ÓÐÁ½¸öÄÜÁ¦ÊÇÖµµÃ½è¼øµÄ£¬¼´
¡°loader¡± Öлº´æµ¥¸öÎļþ¹¹½¨½á¹ûµÄÄÜÁ¦£¬ÒÔ¼°¶ÔÎļþÖ®¼äÒÀÀµ¹ØÏµµÄ¶¨ÖÆÄÜÁ¦¡£ÊìϤ±àд Webpack
loader µÄÈË¿ÉÄÜ»á¶ÔaddDependency ·½·¨±È½ÏÊìϤ£¬Õâ¸ö·½·¨ÓÃÓÚÉùÃ÷ÎļþÖ®¼äµÄÒÀÀµ¹ØÏµ¡£ÕâÔÚÔöÁ¿¹¹½¨Ê±·Ç³£ÓÐÓã¬ÀýÈç
a ÒÀÀµÓÚb£¬ÄÇôÈç¹û b ÎļþÐèÒªÖØÐ¹¹½¨£¬ÄÇôÏÔÈ»£¬a Ò²±ØÐëÉáÆú»º´æ£¬ÖØÐ¹¹½¨
¿É¼û Grunt¡¢Gulp ºÍ Webpack ËäÈ»¶¼ÊÇ Web ǰ¶Ë¹¹½¨³£ÓõÄÓÅÐ㿪Դ¹¤¾ß£¬µ«ÔÚÓ¦ÓÃÓÚ¸´ÔÓÏîĿʱ£¬ÈÔ´æÔÚһЩ¿ÉÓÅ»¯Ö®´¦¡£¹¹½¨¹¤¾ß±¾ÉíµÄÄÜÁ¦¡¢Ð§ÂʺÍÐÔÄÜÌáÉý½«ÈÃÈÎÒâ¼Ü¹¹¸ü¼ÓÈÝÒ×ʵÏÖ£¬²»ÔÙÈô󵨵ÄÉè¼ÆÊÜÏÞÓÚ¹¤¾ß¡£
Èý¡¢¹Ø¼ü¸Ä½ø
»ùÓÚͬ¹¹ JavaScript Ó¦ÓõÄʵ¼Ê¹¹½¨ÐèÒª£¬Õë¶ÔÎÒÃǸոշÖÎöµÄÏÖ´æ¹¹½¨¹¤¾ßµÄ²»×㣬ÎÒÃÇʵʩÁË´ÓÒÔϼ¸µã³ö·¢µÄ¸Ä½ø¡£Îª±ãÓÚÓïÒå±íÊö£¬±¾ÎÄʹÓÃ
TypeScript ÓïÑÔ±àд´úÂëʾÀý£¬µ«ÔÚʵ¼ÊʵÏÖʱһ°ãÖ±½ÓÓÉ JavaScript ÓïÑÔÀ´³Ðµ£ËùÓÐÈÎÎñ¡£
1. ½Úµã»º´æ
ÏîÄ¿¹¹½¨µÄ±¾ÖÊÊǶÔÎļþ±ä»»²Ù×÷µÄÓÐÐòÅÅÁм¯ºÏ¡£±ä»»Ò»°ãÊÇÕë¶ÔÎļþÄÚÈݵģ¬Èç¿Õ°×ѹËõ¡¢Ó﷨ת»»£¬ÓÚÊÇ£¬ÎÒÃǽ«±ä»»³éÏóΪһ¸öº¯Êý
transform£¬ËüµÄÊäÈëÊÇÎļþµÄµÄÄÚÈÝ£¬¿ÉÒÔÊǶþ½øÖÆµÄ Buffer£¬Ò²¿ÉÒÔÊÇÎı¾µÄ×Ö·û´®£¨String£©£¬Êä³öÔòÊÇת»»ºóеÄÎļþÄÚÈÝ¡£ÓýӿÚÓï·¨±íʾ¼´ÈçÏÂÃæµÄ´úÂë¿é¡£½«¶à¸ö
Transformer ´®ÁªÆðÀ´¾ÍÊdz£¹æµÄ¹¹½¨¹ý³Ì¡£
interface Transformer { transform (content: string): string; } |
ÏÔÈ»£¬¶ÔÓÚÏàͬ content µÄÖµ£¬Èç¹û transform µÄ·µ»ØÖµÒ»Ö±±£³ÖÏàͬ£¬ÄÇôµÚÒ»´ÎÒÔºóµÄ²Ù×÷¶¼ÊDz»±ØÒªµÄ£¬ÒòΪÎÞÂÛÖØ¸´¶àÉٱ鷵»Ø¶¼ÊÇÒ»Ñù¡£Èç¹ûÊìϤ
redux£¬ÄÇôһ¶¨¶ÔÆäÖÐµÄ reducer ¸ÅÄîÓ¡ÏóÉî¿Ì£¬ËüÊÇÒ»¸ö¡°´¿º¯Êý£¨pure function£©¡±£¬ÎÞÂÛʲôʱºò£¬Í¬ÑùµÄÊäÈë×ÜÊÇÓÐͬÑùµÄÊä³ö¡£¸ÃÌØÐÔÒ²ÊÇ
Transformer Äܹ»ÊµÏÖ»º´æµÄ»ù´¡£¬Ò²¾ÍÊÇ˵£¬ÒÔ content ΪË÷Òý£¬Ö»ÒªË÷Òý²»±ä£¬»º´æ¾Í¿ÉÒÔÒ»Ö±ÓÐЧ£¬¹¹½¨ËÙ¶ÈÒ²»á´ó·ù¶ÈÌáÉý¡£ÔÚʵ¼ÊµÄ²Ù×÷ÖУ¬¿ÉÒÔÈ¡content
µÄ md5 Öµ×÷Ϊʵ¼ÊµÄË÷Òý£¬ÓÚÊÇÒ»¸öµäÐ͵Ŀɻº´æ Transformer ¿ÉÒÔÊÇÕâÑùµÄ£º
class FooTransformer implements Transformer { transform (content: string) { let key = md5(content); if(cache.has(key)) { return cache.get(key); } else { const newContent = this._transform(content); key = md5(newContent); cache.set(key, newContent); return newContent; } } } |
È»¶ø²¢·ÇËùÓÐ transform ·½·¨¶¼ÓÐÒ»¸öÈë²Î£¬ÀýÈç Transformer ¿ÉÄÜÐèÒªÒ»¸ö options
¹¹Ôì²ÎÊý£¬Ëü¼«ÓпÉÄܵ¼ÖÂÔÚÏàͬµÄ content ÉϲúÉú²»Ò»ÖµÄÊä³ö¡£ÔÚÕâÇé¿öÏ£¬²»½¨ÒéÔÙʹÓûº´æ»úÖÆ£¬Èç¹ûÒ»¶¨ÒªÊ¹Óõϰ£¬ÄÇô
key ÖµµÄËã·¨½«»á¿ªÊ¼±äµÃ¸´ÔÓÆðÀ´£¬²¢ÇÒÈÝÒ×µ¼Ö³ö´í¡£ËùÒÔ£¬Ã÷È·ÄãµÄ transform µ½µ××öÁËʲô£¬ÔÙʹÓûº´æ»úÖÆÌáÉý¹¹½¨ËÙ¶È¡£
ÁíÍ⣬ transform ·½·¨µÄÈë²ÎºÜ¿ÉÄܲ»Êǽö½öÒ»¸ö content£¬¶øÊÇÒ»¸ö¼¯ºÏ£¬ÕâÖÖÇé¿öÏ£¬ÎļþÃûÒ²ÒªÓÃÀ´Çø·ÖËüÃÇ£¬ÄãÐèÒªµÄ²»ÊÇÒ»¸ö
transform£¬¶øÊÇÒ»¸ö transformAll£¬Èë²ÎÔòÊÇ File µÄ¼¯ºÏ FileCollection£¬¶ø
File ¶ÔÏó£¬ÖÁÉÙ±ØÐë°üÀ¨ filename ºÍ content Á½¸öÊô¡£Transformer ½Ó¿ÚµÄ¶¨ÒåÔòΪ£º
interface File { filename: string; content: any; }
interface FileCollection {
[index: number]: File;
}
interface Transformer {
transform (file: File): File;
transformAll (files: FileCollection): FileCollection;
} |
Õë¶ÔÕâÁ½ÖÖÀàÐ굀 Transformer£¬ÎÒÃÇÒÔÒ»¸öÊôÐÔÀ´×öÇø·Ö£º
interface Transformer { isTorrential(): boolean; } |
ÔÚ isTorrential() ·½·¨·µ»ØÕæÊ±£¬transformAll ·½·¨½«´úÌæ transform
±»µ÷Óá£ÏÔÈ»£¬ÓÉÓÚÈë²Î±äµÃ·Ç³£¶à£¬ÉèÖûº´æÒ²±äµÃÀ§ÄÑÖØÖØ£¬Ë÷ÐÔÖ±½ÓÅׯú²»Òª¡£ÐèÒªÖ¸³öµÄÊÇ£¬transformAll
µÄÄÚ²¿¿ÉÒÔµ÷Óà transform¡£
×îºó£¬transform ºÍ transformAll ¿ÉÄܶ¼²»ÊÇͬ²½µÄ£¬·µ»ØÒ»¸ö Promise ±È·µ»ØÒ»¸ö
String »ò File ¶ÔÏó¸üºÏÊÊ¡£
×ܽáһϣ¬±¾½Ú·ÖÎöÁËÏîÄ¿¹¹½¨µÄʵÖʺͻù±¾µ¥Ôª£¬ÔÚ»ù±¾µ¥Ôª Tranformer ÖÐÉèÖûº´æ¿ÉÒÔÓÐÏÞÌáÉý¹¹½¨µÄËÙ¶È¡£µ«ÒªÇå³þµØÖªµÀʲôʱºò¸ÃʹÓûº´æ£¬Ê²Ã´Ê±ºò²»¸ÃʹÓã¬Ê¼ÖÕÈù¹½¨ÐÐΪ·ûºÏÔ¤ÆÚ¡£
2. ÍØÆË·¾¶
Ç°ÃæÌáµ½£¬ÏîÄ¿¹¹½¨ÊÇÓÉ Transformer µÄÓÐÐò¼¯ºÏ¹¹³ÉµÄ£¬Transformer ¿ÉÒÔ·Ö½âÒ²¿ÉÒԺϲ¢£¬Õâ·Ç³£ÏñË®Á÷£¬Òò´ËÎÒÃÇÐÎÏ󵨳ÆÖ®Îª
Stream¡£Ã¿Ò»¸ö Stream ¶ÔÏóÄÚ²¿Î¬»¤×î¶àÒ»¸ö Transformer ʵÀý³ÉÔ±£¬²¢ÒÔ File
¶ÔÏóµÄ¼¯ºÏ×÷ΪStream µÄÓÐÐ§ÔØºÉ£¬Ò»°ãµØ£¬ËüÃÇÍùÍùÔÚijÖÖÒâÒåÉÏÊÇͬÀàÐ͵ÄÎļþ¡£
interface Stream { tranformer: Transformer; } |
ÓÉÓÚÁ÷ÓëÁ÷Ö®¼äµÄ¹ØÏµ¹¹³ÉÁËÒ»¸öÓÐÏòµÄÍØÆËͼ£¬Òò´Ë Stream ¶ÔÏóÐèҪά»¤ÓëÆäËü Stream Ö®¼äµÄ¹ØÏµ£¬Ìí¼Ó
upriversºÍ downrivers ³ÉÔ±ÒÔʵÏÖ£¬·Ö±ð³ÆÎªÖ±Êô¡°ÉÏÓÎÁ÷¡±ºÍÖ±Êô¡°ÏÂÓÎÁ÷¡±£º
interface Stream { uprivers: StreamCollection; downrivers: StreamCollection; }
interface StreamCollection {
[index: number]: Stream;
push(stream: Stream):number;
} |
ÒÔÏÂͼΪÀý£¬Í¼ÖÐÐòºÅ ¢Ù µÄ downrivers Ϊ [¢Ú,¢Ý]£¬ ¢Ú µÄ uprivers Ϊ [¢Ù,¢Ü]£¬ÒÀ´ËÀàÍÆ¡£

downrivers ÊýÁ¿´óÓÚ1µÄÁ÷³ÆÎª¡°·Ö½âÁ÷¡±£¬uprivers ÊýÁ¿´óÓÚ1µÄÁ÷³ÆÎª¡°ºÏ²¢Á÷¡±¡£ÉÏͼÖУ¬¢Ù
Ϊ·Ö½âÁ÷£¬¢Ú ΪºÏ²¢Á÷¡£¹ËÃû˼Ò壬·Ö½âÁ÷ÊÇÒ»¸öÒÔÉϹ¹½¨Á÷³Ì¾ßÓÐÏàͬÉÏÓι«¹²²¿·ÖµÄ¼òµ¥±íÊö£¬µ«ºÏ²¢Á÷È´²¢²»×ÜÊÇ´ú±íÒ»¸öÒÔÉϵĹ¹½¨Á÷³Ì¾ßÓÐÏàͬµÄÏÂÓι«¹²²¿·Ö£¬¸üÖØÒªµÄÊÇ£¬ºÏ²¢Á÷µÄÊäÈëÊÇÆäËùÓÐÉÏÓÎÁ÷µÄÊä³ö¡£¶ÔÓںϲ¢Á÷À´½²£¬ËüµÄÊäÈëÎļþ¼«ÓпÉÄÜÓÐ×Ų»Í¬µÄÀ´Ô´¡£¾ÙÒ»¸öÏÖʵµÄÀý×Ó£¬ÊäÈë
browserify µÄÎļþ¼«ÓпÉÄÜÀ´×Ô node_modules Ŀ¼ÄÚ£¬µ«¸ü¶àÀ´×ÔÓÚÄãÔÚ src Ŀ¼±àдµÄÔ´´úÂë¡£ÏÔÈ»£¬ÕâÁ½ÖÖÀ´Ô´µÄÎļþºÜÈÝÒ×ÓÐ×Ų»Í¬µÄǰÆÚ¹¹½¨Á÷³Ì£¬±ÈÈçÔ´´úÂëÊÇÓÉ
ES2015 ±àдµÄ£¬µ« node_moduels ÔòΪ ES5 Óï·¨¡£
ÔÚ¹¹ÖþÁ÷µÄÍØÆËͼµÄʱºò£¬ÎÒÃÇ¿ÉÒÔ¶¨ÒåÒ»¸ö connect ·½·¨À´½¨Á¢ËüÃÇÖ®¼äµÄÁªÏµ£º
interface Stream { connect(downriver: Stream): Stream; }
class FooStream implements Stream {
connect (downriver: Stream) {
this.downrivers.push(downriver);
downriver.uprivers.push(this);
return downriver;
}
} |
ÄÇô½¨ÉèÉÏͼÖеÄÍØÆËµÄ´úÂë¾Í¿ÉÒÔÊÇ£º
s1.connect(s2).connect(s6).connect(s3) s1.connect(s5).connect(s4).connect(s2); |
ʵ¼ÊµÄÁ÷ÍØÆËͼ´ó¶àÊýÊǶþάµÄ£¬²»¹ý´ïµ½ÈýάµÄ¸´ÔÓ¶ÈÒ²ÊǺÏÀíµÄ£¬Çë¿´ÏÂͼ¡£ÏȲ»ÂÛ´ËͼÊÇ·ñ·´Ó¦ÁËÏîÄ¿¹¹½¨µÄÒ»¸öÕæÊµÁ÷³Ì£¬ÖÁÉÙËü±í´ïÁ˹¹½¨Á÷³Ì¿ÉÄÜ´ïµ½µÄ¸´ÔÓ¶È¡£

ÏÂÃæÎÒÃǾÍÒÔÉÏͼΪÀý̽ÌÖÁ÷ÍØÆËͼµÄÕýÈ·¹¤×÷·½Ê½¡£Ê×ÏÈ£¬»ùÓÚÐÔÄܺ͹¦ÄÜ¿¼Á¿£¬ÎÒÃǵÄÄ¿±ê°üÀ¨£¬ÔÚÍêÕûµÄÒ»´Î¹¹½¨Á÷³ÌÖУº
°üÀ¨·Ö½âÁ÷ÔÚÄÚµÄËùÓÐÁ÷£¬¶¼Ö»ÄÜÔËÐÐÒ»´Î¡£ÕâÒâζ×Å£¬Í¬Ò»¸öÎļþ²»»á±»´«Èë Stream µÄ transformer
³ÉÔ±Ò»´ÎÒÔÉÏ£»
ºÏ²¢Á÷µÄËùÓÐÉÏÓÎÁ÷ÔËÐÐÍê±Ïºó£¬ºÏ²¢Á÷²ÅÄÜ¿ªÊ¼ÔËÐУ¬ÔÒò¸Õ¸ÕÒѾ˵Ã÷£¬ËüÐèÒªÉÏÓÎÁ÷µÄËùÓÐÊä³ö¼ÓºÍͬʱ×÷ΪÊäÈë
ÎÒÃÇ°Ñ Stream µÄÈë¿Ú API ·½·¨³ÆÎª flow£º
interface Stream { flow (files: FileCollection): Promise; } |
ÉÏÒ»½ÚÌáµ½£¬transform/transfromAll ·½·¨µÄ·µ»ØÖµÓ¦¸ÃÊÇ Promise£¬ÄÇô flow
µÄ·µ»ØÖµÒ²Í¬ÑùÊÇ Promise¡£
ÿ¸öÁ÷ÔÚÖ´ÐÐ flow ²Ù×÷ʱ£¬ÆäʵÖʶ¼ÊÇÔÚµ÷ÓÃÆäÄÚ²¿µÄ transformer ³ÉÔ±£¬¸ù¾Ý isTorrential()
·µ»ØÖµµÄ²»Í¬À´¾ö¶¨µ÷ÓÃËüµÄ transform »òÕß transformAll ·½·¨¡£´ÓÕâÀï¿ÉÒÔ¿´µ½£¬Æäʵ
Transformer ÄÚ²¿µÄ»º´æÒ²¿ÉÒÔÒÆÖÁ Stream Öд洢£¬ÔÚ Transformer »á¸üÁé»îһЩ¡£ÓÉÓÚ¹¹½¨ÐÐΪµÄÈÎÒâÐÔ£¬Transformer
½«ÊǷdz£ÖØÒªµÄÀ©Õ¹µã£¬×¢Òâ±£³ÖËüµÄÇáÁ¿ÐÔ¡£
class FooStream implements Stream { public flow (files: FileCollection) { if (this.transformer.isTorrential()) { return this.transformer.transformAll(files); } else { return Promise.all(files.map(file => this.transformer.transform(file))); } } } |
µ«Ò»¸öÁ÷Íê³Éºó£¬Ëü¿ÉÄÜ»¹Òª°Ñ×ÔÉíµÄÊä³ö´«µÝ¸øÏÂÓÎÁ÷£¨×¢Ò⣺Ҳ¿ÉÒÔ²»´«µÝ£¬µ«ÈÔȻҪ֪ͨ£©¡£Òò´Ë£¬ÔÚ flow
ÖУ¬×îºó»¹ÐèÒªÒÀ´Î֪ͨÿһ¸öÏÂÓÎÁ÷£¬Í¨ÖªµÄ½Ó¿Ú²»·Á³ÆÖ®Îª notify£º
interface Stream { notify (files: FileCollection): Promise; } |
×¢Òâ¸÷¸öÏÂÓÎÁ÷ÊÇÒÀ´Î±» notify µÄ£¬Èç¹ûÄܱ£Ö¤ÏÂÓÎÁ÷Ö®¼äûÓÐÏȺóµÄÒÀÀµ¹ØÏµ£¬ÄÇôËüÃÇȷʵ¿ÉÒÔ²¢ÐУ¬ÕâÖÖÒÀÀµ¹ØÏµ¿ÉÄܲ»½ö½öÌåÏÖÔÚÍØÆËͼÉÏ£¬ÒòÎªÍØÆËͼֻ±í´ïÁËÎļþ´«µÝ·½ÏòµÄ¹ØÏµ¡£³ý´ËÖ®Í⣬Ä㻹¿ÉÒÔʵÏÖÆäËüά¶ÈµÄÒÀÀµ£¬Îª´Ë£¬ÏÂÓÎÁ÷ÒÔ´®Ðеķ½Ê½ÔËÐлá¸ü±£ÏÕһЩ¡£
×¢Ò⣬´«µÝ¸øÏÂÓÎÁ÷µÄÊý¾ÝÒ»¶¨ÊÇ¿½±´£¬±ÜÃâÏÂÓÎÁ÷ÐÞ¸ÄÉÏÓÎÁ÷µÄ»º´æ¡£
µ±Ò»¸öÁ÷µÄËùÓÐÉÏÓÎÁ÷¶¼Íê³Éºó£¬Ëü²Å¿ªÊ¼ÔËÐУ¬ËùÒÔ£¬notify Ê®·ÖÓбØÒªÔÚÊʵ±µÄʱ»ú¼¤»î×ÔÉí flow£º
class FooStream implements Stream { public notify (files: FileCollection) { this.files.push(...files); if (this.isUpriversAllReady) { return this.flow(this.files); } } } |
ÕâÑù£¬ÎÒÃÇÄܹ»±£Ö¤ºÏ²¢Á÷ÔÚÕýÈ·µÄʱ»úÈ¥ÔËÐУ¬Ò²¾ÍʵÏÖÁËÕâÀàÌØÊâµÄ¹¹½¨ÈÎÎñ¡£»Ø¹ýÍ·À´¿´ÉÏÃæµÄÄÇÕÅÍØÆËͼ£¬¼ýÍ·´ú±íÁËÒÀÀµ¹ØÏµ£¬½ÚµãµÄÊý×־ʹú±íÁËÖ´ÐеÄ˳Ðò¡£¶ÁÕß¿ÉÒÔ×ÔÐÐ˼¿¼ÎªÊ²Ã´ÊÇÕâÑùµÄ˳Ðò¡£ÐèҪעÒâµÄÊÇ£¬¸ù¾ÝÒÀÀµ¹ØÏµ¶¨ÒåµÄÏȺó£¬×îÖÕµÄÖ´ÐÐ˳ÐòÒ²ÊDz»Í¬µÄ£¬Ö»Òª·Ö֧ûÓÐÒÀÀµ¹ØÏµ£¬ÏÂÓÎÁ÷µÄ˳ÐòÏȺó¾ÍÎÞËùνÁË¡£
×ܽáһϣ¬±¾½ÚÎÒÃÇÌÖÂÛµÄÊÇÈçºÎ¶¨ÒåºÍʵÏÖ API ÒÔÖ§³ÖÈÎÒâµÄ¹¹½¨Á÷³Ì¡£¹¹½¨µÄÁé»îÐÔʼÖÕÊDZ¾ÎÄÌÖÂÛµÄÖØµã£¬ÒòΪÄãÎÞ·¨ÏëÏó°ëÄêÉõÖÁÈý¸öÔºóÄãµÄÏîÄ¿»á¸´ÔÓµ½Ê²Ã´³Ì¶È£¬¹¹½¨ÏµÍ³µÄ½¨ÉèÊÇÒ»¸ö³É±¾ºÜ´óµÄͶÈ룬²¢Çһᾳ£Ëæ×ÅÏîÄ¿¼Ü¹¹µÄ±ä»¯¶ø±ä»¯£¬±£Ö¤³ä·ÖµÄ¿ÉÀ©Õ¹ÐÔ£¬»áÈÃÄãÃæ¶Ô¿ìËٱ仯ʱÉìËõ×ÔÈç¡£Ïà±ÈÓÚ
Grunt ºÍ Gulp£¬ÎÒÃÇÆÚÍûÒÔÒ»ÖÖ¸ü¸ßЧºÍ¸üÖ±¹ÛµÄ·½Ê½¶¨Òå×Ô¼ºµÄ¹¹½¨Á÷³Ì¡£
3. ÒÀÀµÍ¼Æ×
Ò»¸öÏîÄ¿ÖÐËù°üº¬µÄÎļþÀàÐÍ¿ÉÄܷdz£¶à£¬Ìرð¶ÔÓÚ Web ǰ¶Ë¶øÑÔ£¬HTML¡¢JavaScript¡¢CSS
ºÍ¸÷ÖÖͼƬÊDZز»¿ÉÉٵ쬽üÄêÀ´£¬Less¡¢Sass¡¢JSX¡¢ES2015 µÈǰ´¦ÀíÓï·¨Ô½À´Ô½¶à£¬Ã¿Ò»ÖÖ¶¼ÐèÒªÌØÊâµÄ¹¹½¨Á÷³Ì¡£¶øÕâЩÁ÷³ÌµÄ˳ÐòÏÔÈ»²»ÊÇÈÎÒâµÄ¡£ÔÚÅäÖÃ
Grunt¡¢Gulp ÈÎÎñʱ£¬ÎÒÃÇ»áÏÂÒâʶµØÏÈÈ¥´¦ÀíͼƬµÈ¶þ½øÖÆ×ÊÔ´£¬ÔÙ´¦Àí CSS ºÍ JavaScript£¬×îºó´¦Àí
HTML¡£ÕâÊÇÒòΪ²»Í¬ÖÖÀàµÄÎļþÖ®¼äÓÐ×Å΢ÃîµÄÒÀÀµ¹ØÏµ£ºÏÖ´úµÄǰ¶Ë¹¹½¨ÖУ¬¶ÔÓÚ¾²Ì¬×ÊÔ´£¬¶¼»á²ÉÓÃÎļþÃû¼Óʱ¼ä´ÁµÄ·½Ê½À´¹æ±Ü»º´æµÄÓ°Ï죬Õâ¸ö¹ý³ÌÒ»°ãÊǸÃÀàÐÍÎļþµÄÖ®ºóÒ»¸ö¹¹½¨²½Ö裬Èç¹ûÒªÒýÓÃËüµÄ×îÖÕ·¾¶£¬¾Í±ØÐëµÈµ½ËüÍêÈ«¹¹½¨Íê±Ï¡£ÑÛ¹â·Å¿í¹ãµÄ»°£¬ÒÀÀµ¹ØÏµÔ¶Ô¶²»Ö¹ÒýÓ÷¾¶ÕâÒ»ÖÖÐÎʽ£¬Èç¹ûÐèÒªµÄ»°£¬Äã¿ÉÒÔ°ÑһЩ¹¹½¨µÄ½á¹ûÐÅÏ¢´æ´¢ÓÚÄÚ´æÖУ¬×÷ΪÆäËüÀàÐÍÎļþ¹¹½¨µÄÒ»ÖÖÊäÈë¡£×ÜÖ®£¬²»Òª½«ÎļþÖ®¼äµÄÒÀÀµ¹ØÏµ¹Ì»¯£¬HTML
ÒÀÀµ JavaScript ²»Ö¹ÓÐ ±êÇ©ÕâÒ»ÖÖÐÎʽ£¬CSS ÒýÓÃͼƬҲ²»Ö¹ background(-image)
ÕâÒ»ÖÖ¡£
Ïë´ïµ½Ö§³ÖÈÎÒâµÄ¹¹½¨Á÷³Ì£¬¶¨ÖÆÎļþÖ®¼äµÄÒÀÀµ¹ØÏµÊDZز»¿ÉÉٵ쬾ÍÏñ Webpack µÄ addDependency·½·¨Ò»Ñù£¬Äã¿ÉÒÔÒÔÈÎÒⷽʽʵÏÖÕâÑùÒ»¸ö
API£º
addDependency('a.css', 'd.png'); |
ÓÐÁËËü£¬Äã¿ÉÒÔ×Ô¶¨Òå¶àÖÖÒÀÀµ¹ØÏµ£¬¾Ù¸öÀý×Ó£¬ÔÚÈÎÒâÎļþÖУ¬Ê¹Óà __uri() µÄÓï·¨À´ÒýÓÃÆäËü¾²Ì¬×ÊÔ´ÎļþµÄ×îÖÕÏßÉÏ·¾¶£¬Õâ²»ÊDZê×¼µÄÒýÓùØÏµ£¬µ«Ò²ÐíÄãÓõÃ×ÅËü¡£
¶ÔÓÚÏîÄ¿³õ´ÎµÄÈ«Á¿¹¹½¨£¬ÎļþÖ®¼äµÄÒÀÀµÖ»ÒªÈ˹¤±£Ö¤Æä˳Ðò¾Í¿ÉÒÔÁË£¬µ«¶ÔÓÚÖ®ºóµÄ watch ÔöÁ¿¹¹½¨£¬ÒÀÀµ¹ØÏµ¾Í±äµÃ¼«ÎªÖØÒª¡£ÊÔÏëÄãÊÇÈçºÎ¶¨Òå
Grunt »ò Gulp µÄ watch ¶¯×÷µÄ£¬ÊDz»ÊÇÐèÒªÅäÖüàÌýµÄĿ¼ÒÔ¼°ÒªÖ´ÐеÄÈÎÎñ£¿ºóÃæµÄÈÎÎñÓÉÓÚÎÞ·¨µÃÖªµ½µ×ÊÇÄÄЩÎļþ±»ÐÞ¸ÄÁË£¬Òò¶ø²»µÃ²»¶¼ÒªÖØÐ¹¹½¨Ò»±é¡£Ïà±È֮ϣ¬Webpack
µÄÔöÁ¿¹¹½¨¾ÍҪѸËٵö࣬¼¸ºõÊÇ˲ʱµÄ£¬ÒòΪËüÕÆÎÕÁËÄÄЩÎļþ²»ÐèÒªÔÙ¹¹½¨µÄÐÅÏ¢¡ª¡ª±»Ð޸ĵÄÎļþÒÔ¼°ÒÀÀµËüµÄËùÓÐÆäËüÎļþ¶¼ÐèÒªÖØÐ¹¹½¨£¬ÆäËü¶¼²»ÐèÒªÔÙ¹¹½¨¡£ÕâÒ²ÊÇÒ»¸ö±È½Ï³éÏóµÄÍØÆËͼ£¬ÐÒÔ˵ØÊÇ£¬Õâ¸öËã·¨·Ç³£¼òµ¥£¬ÄãÖ»ÐèÒªµÝ¹éµØÊÕ¼¯¸÷¸öÍØÆËͼÉϵĽڵã¾Í¿ÉÒÔÁË¡£
×ܽáһϣ¬ÎļþÖ®¼ä¾«È·µÄÒÀÀµ¹ØÏµÊÇʵÏÖ¸ßËÙÔöÁ¿¹¹½¨µÄ»ùʯ£¬Ëü½«ÔöÁ¿µÄά¶È¿ØÖÆÔÚÁËÎļþ¼¶±ð¡£ÊµÊ±Ð޸ĺÍÔ¤ÀÀÊÇ¿ª·¢¹ý³ÌÖеÄÒ»¸öÖØÒªÌØÐÔ£¬ÓÈÆä¶ÔÓÚ
Web ǰ¶Ë¡£Èç¹ûÉè¼ÆºÏÀíµÄ»°£¬È«Á¿¹¹½¨µÄÂß¼Ò²¿ÉÒÔÈõ»¯ÎªÒ»ÖÖÔöÁ¿¹¹½¨£¬ÕâÑù¿´À´£¬È«Á¿ºÍÔöÁ¿²¢Ã»Óб¾ÖÊÇø±ð¡£
4. È«Á¿ËÑË÷
ÎÒÃÇÏ£Íû¹¹½¨¹¤¾ßÄܹ»¸²¸Çµ½ÏîÄ¿ÖеÄËùÓÐÎļþ£¬¶ø²»½ö½öÊÇ Grunt ºÍ Gulp ÖÐÈÎÎñ¸²¸ÇµÄÄÇЩ¡£ÕâÑù×öÓÐʲôºÃ´¦ÄØ£¿´ð°¸ÊÇÄãµÄ¹¹½¨Âß¼¿ÉÒÔ²»±ØÎ¬»¤¶ÔÕâЩÎļþ×ÊԴϸ½ÚµÄ´¦Àí£¬Í¬Ê±»¹ÄÜÇáÒ×ʵÏÖËüÃǵķ¢²¼¡£¾Ù¸öÀý×Ó£¬ÓÐһЩ¾²Ì¬×ÊÔ´£¬°üÀ¨¸÷ÖÖ¸ñʽµÄÒôƵ¡¢ÊÓÆµºÍͼƬ£¬ÒÔ¼°ÆäËü×Ô¶¨ÒåµÄÌØÊâ¸ñʽ£¬ËüÃDz»ÐèÒª¾¹ýÈκεĹ¹½¨´¦Àí£¬Ö»ÐèÒª·¢²¼µ½Ìض¨µÄĿ¼Ï£¬ÒÔ¹©
Web ä¯ÀÀÕß·ÃÎÊ¡£ÔÚ Grunt ºÍ Gulp ÖУ¬ÄãÐèҪʱ¿Ì×¢ÒâÄãµÄÑ¡ÔñÆ÷ÊÇ·ñÑ¡ÖÐÁËËüÃÇ£¬·ñÔò¾Í»á±»ÒÅ©¡£µ±ÎļþµÄ·¾¶ºÍÀàÐͲ»¿Éö¾Ùʱ£¬Î¬»¤¹¹½¨µÄÑ¡ÔñÆ÷¾Í³ÉÁËÒ»Ïµ££¬Ò²ÊÇÒ»Ïî·çÏÕ£¬Äã²»Äܱ£Ö¤ËùÓÐÎļþ¶¼±»Ñ¡ÖÐÁË£¬ÌرðÊÇÒýÓÃÁ˵ÚÈý·½µÄ×é¼þ£¬±ÈÈç
node_modules¡£
gulp.src('assets/*. {mp4,rmvb,mp3,avi,srt,png,jpg,bmp,ico,webp,zip,rar,gz,pptx,docx,xlsx}') |
ΪÁ˽â¾öÕâ¸öÎÊÌ⣬ÎÒÃǽ«ÏîĿĿ¼ÏµÄËùÓÐÎļþ¶¼ÕÒ³öÀ´£¬°üÀ¨ node_modules¡¢bower_components¡¢jspm_packages
µÈÒÀÀµ£¬Ò»¸ö¶¼²»ÒªÂäÏ¡£ÓÉÓÚÏîÄ¿¹¹½¨»¹ÊÇÒª»ùÓÚÎļþÑ¡ÔñÆ÷µÄ£¬±Ï¾¹Í¬Ò»ÀàµÄ×ÊÔ´²ÅÄÜ×ßͬһ¸ö¹¹½¨Á÷³Ì¡£ÎÒÃÇÕë¶Ôÿһ¸öÑ¡ÔñÆ÷À´´´½¨Ò»¸öÎļþ¼¯ºÏ£¬·²ÊÇÆ¥Åä¸ÃÑ¡ÔñÆ÷µÄÎļþ¶¼·Åµ½Õâ¸ö¼¯ºÏÖУº
interface MatchPair { files: FileCollection; selector: any; headStream: Stream; } |
ÎÒÃÇÕâÀïʹÓõÄÑ¡ÔñÆ÷Óï·¨ÊÇ multimatch£¬Òò´ËÖ§³ÖÊý×é»ò×Ö·û´®¡£
ÏÖÔÚ£¬´´½¨Ò»¸öеÄÎļþ¼¯ºÏ£¬°ÑËùÓв»Æ¥ÅäÈκÎÑ¡ÔñÆ÷µÄÎļþ·Åµ½ÀïÃæ¡£ÕâÊÇÒ»¸öÌØÊâµÄ¼¯ºÏ£¬×¨ÓÃÀ´ÊÕ¼¯¡°ÒÅÁôµÄ¡±Îļþ¡£²»ÂÛÊÇÈ«Á¿»¹µÃÔöÁ¿£¬¹¹½¨¹¤¾ß¶¼Ó¦¸ÃʼÖÕά»¤ÕâЩ
N+1 ¸öÎļþ¼¯ºÏµÄÕýÈ·ÐÔ¡£headStream ÊÇÒ»¸ö¿ÕµÄÁ÷£¬ËüûÓÐÈκΠtransformer ³ÉÔ±£¬ËüµÄ×÷Óýö½öÊÇÏÎ½ÓÆäËüÁ÷¡£ÓÚÊÇ£¬ÏîÄ¿¹¹½¨µÄʵÖʾͱä³ÉÁË
files ͨ¹ý¸÷×ÔÅä¶ÔµÄheadStream¡£Èç¹ûÄãÔ¸Òâ¶ÔÒÅÁôÎļþÒ²½øÐй¹½¨£¬ÄÇôҲÊÇ¿ÉÐеġ£

×ܽáһϣ¬±¾½ÚÌÖÂÛÁËÒ»ÖÖÑ¡ÔñÒÅÁôÎļþµÄ·½·¨¡£ÕâÏÄܶÔÓÚ Grunt ºÍ Gulp ¶¼²»¾ß±¸£¬µ«È´Êǹ¤³Ìʵ¼ùÖзdz£ÌùÐĵģ¬Èç¹ûÄã²»±Ø¹ØÐÄÒÅÁôÎļþ£¬´ó¿ÉÆúÖ®²»¹Ü£¬Èç¹ûÐèÒª¿½±´µÈ²Ù×÷£¬½«·Ç³£µØ·½±ã¡£
ËÄ¡¢¸½¼ÓÓÅ»¯ÓëÎÊÌâ
1.´ÅÅ̶ÁÈ¡ÓÅ»¯
ÏÔÈ»£¬¶ÁÈ¡´ÅÅÌÎļþÊǹ¹½¨ÖбȽÏÂýµÄÒ»»·£¬ÌرðÊÇÈ«Á¿ËÑË÷²¢¶¼¶ÁÈ¡µÄ»°¡£ÔÚ³õ´ÎµÄ¹¹½¨ÖУ¬¶Ô±»Ñ¡ÖÐÎļþµÄ¶ÁÈ¡Î޿ɺñ·Ç£¬²»¹ý£¬ÒªÖªµÀÒ»¸öÎļþ¿ÉÒÔ±»¶à¸öÑ¡ÔñÆ÷ÃüÖУ¬Õâ¿ÉÄܵ¼ÖÂÒ»¸öÎļþ±»¶à´Î¶ÁÈ¡¡£ÍêÈ«ÓÅ»¯ËüÆäʵºÜ¼òµ¥£¬ÏòËùÓжÁÈ¡ÎļþµÄÁ÷´«µÝÏàͬµÄ
File ¶ÔÏó£¨Ö±½Ó´Ó MatchPair µÄ files ÖÐÈ¡³ö¼´¿É£©£¬Ö»Òª content ÊôÐÔ²»Îª
null£¬Ôò²»±ØÔٴζÁÈ¡¡£µ±¼àÌýµ½¸ÃÎļþ±»Ð޸ĺó£¬Çå³ý content£¬×îÏÈÆ¥ÅäÕâ¸öÎļþµÄ¶ÁÈ¡Á÷¾Í»áÔٴζÁÈ¡´ÅÅÌ£¬¸úÔÚËüºóÃæµÄÔòÈÔÈ»²»±ØÔٴζÁÈ¡£¬Ò²±£Ö¤ÁËÎļþÄÚÈݵÄʵʱÐÔ¡£
2.Äڴ濽±´ÓÅ»¯
´ÓÉÏÃæµÄÉè¼Æ¿ÉÒÔ¿´µ½£¬ÎÒÃÇûÓÐʹÓà NodeJS µÄ Stream ¶ÔÏóÀ´ÔÚ¸÷¸ö Transformer
Ö®¼ä´«µÝÊý¾Ý£¨Gulp ÊÇÕâÑù×öµÄ£©£¬²»¹ýʹÓõķ½Ê½ÊǷdz£ÀàËÆµÄ£¬ÒòΪ±Ï¾¹»º´æÊÇÒÔ content ΪË÷ÒýµÄ£¬¼´Ê¹ÊÇÁ÷Ò²ÐèÒªµÈµ½È«²¿½ÓÊÕÍêºó²Å¿ªÊ¼´¦Àí£¬ÕâºÍÖ±½Ó´«µÝÈ«²¿ÄÚÈÝûʲô·Ö±ð¡£ÎÒÃÇÔÚ
Transformer ÉÏÉèÖõĻº´æ£¬¿ÉÄÜ´øÀ´ºÜ¶àµÄÎļþ¿½±´£¬Èç¹ûÎļþÄÚÈݹý´ó£¬ÔòÄÚ´æ»á±»¿ìËÙÏûºÄ¡£ÎªÁËÓÅ»¯´ËÎÊÌ⣬ÎÒÃÇÉèÖÃÁËÒ»¸öãÐÖµ
f£¬ÎļþÌå»ý³¬¹ý f £¬»º´æÔòÓÉÄÚ´æÐ´ÈëÁÙʱÎļþ¡£µ±È»£¬ÕâÊÇ»ùÓÚÎļþ¶ÁдҪ±È transform ¿ìµÄ»ù´¡Éϵġ£
3.ÒÀÀµ¹ØÏµµÄй¶
ʹÓà addDependency() À´ÉùÃ÷ÒÀÀµÊDz»ÊÕÁ²µÄ£¬Ò²¾ÍÊÇ˵Äã¿ÉÒÔÔÚÈÎÒâλÖã¨Ö÷ÒªÊÇ Transformer
ÖУ©µ÷Óá£ÎÒÃÇûÓÐÌṩһ¸ö clearDependency() ·½·¨ÊÇÒòΪËüµÄÐÐΪ¿ÉÄÜÊÇÆ¬ÃæµÄ¡ª¡ª²»ÄÜÔ¤²âÆäËüλÖÃÊÇ·ñÓÐÏà·´µÄÐÐΪ¡£ÉèÏëÏÂÃæµÄ·¾¶£º
µÚÒ»´Î¹¹½¨£¬ÉùÃ÷ a.css ÒÀÀµÓÚ a.png ºÍ b.png£»
a.css ±»Ð޸ģ¬ÒƳý¶Ô b.png µÄÒÀÀµ£¬µÚ¶þ´Î¹¹½¨£¬ÉùÃ÷ a.css ÒÀÀµÓÚ a.png£»
b.png ±»Ð޸ģ¬a.css ×÷ΪÒÀÀµ·½£¬µÚÈý´Î¹¹½¨£¬ÉùÃ÷ a.css ÒÀÀµÓÚ a.png
¿É¼û£¬ÒÔºó b.png µÄËùÓб仯£¬¶¼»á´¥·¢ a.css µÄÖØÐ¹¹½¨£¬ËäÈ» a.cssÒѾ²»ÔÙÒÀÀµ b.png
ÁË£¬ÎÒÃdzÆÕâÊÇÒ»ÖÖÒÀÀµ¹ØÏµÐ¹Â¶£¬¾ÍÏñÄÚ´æÐ¹Â¶Ò»Ñù¡£ÊÂʵÉÏ£¬ËüҲȷʵÔì³ÉÁËÇá΢µÄÄÚ´æÐ¹Â¶¡£ÒÀÀµ¹ØÏµÐ¹Â¶µÄºó¹û¾ÍÊÇ£¬´øÀ´Á˲»±ØÒªµÄÖØ¹¹½¨£¬Èç¹ûÌõ¼þºÏÊʵϰ£¬Ëü¿ÉÒÔÏñ¶àÃ×ŵ¹ÇÅÆÒ»ÑùÂûÑÓ¿ªÀ´£¬Ôì³ÉÖØ¹¹·ç±©¡£
Èç¹ûÖ´ÒâÒª¹æ±ÜÕâ¸öÎÊÌâµÄ»°£¬Ò²²»ÊDz»¿ÉÄÜ£¬µ«ÎÒÃDz¢Ã»ÓвÉÈ¡ÈκÎÊֶΣ¬ÒòΪ¹¹½¨¹¤¾ßµÄÔËÐÐÖÜÆÚ¶¼²»»áºÜ³¤£¬Ã»ÓÐÌ«´ó±ØÒªÎªÁËËüÔö¼ÓÄÇô¸´ÔÓµÄÂß¼£¬ºÎ¿öËü²¢²»Ó°Ïì¹¹½¨µÄÕýÈ·ÐÔ¡£
Îå¡¢×ܽá

ÒÔÉϾÍÊÇÎÒÃÇΪÁ˽â¾öµ±Ç°ºÍÒÔºó¸´ÔÓµÄǰ¶Ë¹¹½¨¶ø½øÐеÄŬÁ¦£¬Í¬¹¹ JavaScript Ö»ÊÇÒ»¸öÓ¦Óó¡¾°£¬ÀíÂÛÉÏ£¬ÎÒÃÇ¿ÉÒԺܺõØÓ¦¶ÔÈκι¹½¨ÈÎÎñ£¬°üÀ¨
Webpack µÄËùÓй¦ÄÜ¡£Óë Grunt¡¢Gulp ÀàËÆµÄÊÇ£¬ÉÏÃæµÄÉè¼ÆºÍ¸Ä½ø¶¼ÊǷdz£µ×²ãµÄ£¬Èç¹ûÏëÕæÕýÓ¦ÓÃÓÚÒ»¸ö¾ßÌåµÄÏîÄ¿¼Ü¹¹£¬¿ÉÄÜÐèÒª±È½Ï¶àµÄÅäÖᣴÓÕâÒ»µãÉÏ¿´£¬Õâ¸üÏñÊÇÒ»¸ö¹¹½¨ÒýÇæ¡£¸½Í¼ÊǸÃÒýÇæµÄºËÐÄÔËÐмܹ¹£¬ÎÒÃÇÀûÓÃËü½¨ÉèÁ˶à¸ö
Web ǰ¶ËÏîÄ¿£¬ËüÃÇÔڼܹ¹ÉÏÓÐ×ŷdz£´óµÄ²»Í¬£¬ÌرðÊÇÔÚ³õÆÚÉè¼ÆÊ±£¬¼Ü¹¹Ê®·Ö²»Îȶ¨£¬¸ÃÒýÇæºÜºÃµØÖ§³ÅÁ˸÷ÖÖ²îÒ컯µÄ¹¹½¨ÈÎÎñ¡£Õë¶Ô¸ÃÒýÇæµÄ²»×ãºÍȱÏÝ£¬ÎÒÃÇÈÔÔÚ̽Ë÷ºÍ¸Ä½ø¡£Grunt
¡¢ Gulp ºÍ Webpack ÒÀÈ»Êǹ¦Äܷdz£Ç¿´óµÄ¹¤¾ß£¬ÎÒÃÇ´ÓËüÃÇÉíÉÏ½è¼øÁ˺ܶ࣬ҲÓÐÐí¶à²»Ä±¶øºÏÖ®´¦¡£Ã¿ÖÖ¹¤¾ß¶¼ÓÐÆäÊʺϵij¡¾°£¬×îÖØÒªµÄ²»ÊDZȽÏËüÃǵÄÓÅÁÓ£¬¶øÊÇÕÒµ½×îÊʺϵÄÄÇÒ»¸ö£¬Èç¹û±ØÒª£¬Ôò¿ÉÒÔ½øÐÐÊʵ±µÄ¸Ä½ø¡£ |