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

1Ôª 10Ôª 50Ôª





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



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓÆµ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Model Center   Code  
»áÔ±   
   
 
     
   
 ¶©ÔÄ
  ¾èÖú
¾«Ö»¯µÄ΢ǰ¶Ë¿ª·¢
 
  2750  次浏览      27
  2019-7-16
 
±à¼­ÍƼö:
±¾ÎÄÀ´×Ôsohu£¬±¾ÎÄÖ÷Òª½éÉÜÁËÒÔʵÏÖ΢ǰ¶ËµÄÄ¿±ê£¬´ÓÁã¹¹½¨Ò»Ì×΢ǰ¶ËµÄ¿ª·¢·½°¸µÄ×î¼Ñʵ¼ù¡£

΢ǰ¶Ë£¨Micro-Frontend£©£¬Êǽ«Î¢·þÎñ£¨Micro-Services£©ÀíÄîÓ¦ÓÃÓÚǰ¶Ë¼¼ÊõºóµÄÏà¹ØÊµ¼ù£¬Ê¹µÃÒ»¸öǰ¶ËÏîÄ¿Äܹ»¾­Óɶà¸öÍŶӶÀÁ¢¿ª·¢ÒÔ¼°¶ÀÁ¢²¿Êð¡£

±¾ÎÄÖн«»áÒÔ´ËΪĿ±ê£¬´ÓÁã¹¹½¨Ò»Ì×΢ǰ¶ËµÄ¿ª·¢·½°¸µÄ×î¼Ñʵ¼ù*£¬²¢ÓÃÓÚÍê³É Micro Frontends ÍøÕ¾ÖеÄʾÀýÓ¦Óãº

* Èκεط½µÄ×î¼Ñʵ¼ù¶¼ÊÇ»ùÓÚÖ÷¹ÛÅжϵ쬲»ÒªÍÑÀëʵ¼Êä´Ó¡£

΢ǰ¶Ë¿ª·¢µÄÄ¿±ê

΢ǰ¶Ëʵ¼ùÖУ¬ÊÂʵÉÏËùÓеÄÐèÇó¶¼ÊÇΪ¡¸¶ÀÁ¢¿ª·¢¡¹ÒÔ¼°¡¸¶ÀÁ¢²¿Êð¡¹ÕâÁ½´óÄ¿±ê·þÎñµÄ£¬»òÕß¿ÉÒÔÈÏΪÊÇÁ½ÕߵľßÌåʵÏÖ´ëÊ©»òÕß×ÔÈ»ÑÜÉú½á¹û¡£Í¨³£ÎÒÃÇËù˵µÄ¡¸Î¢Ç°¶ËÌØÐÔ¡¹°üÀ¨µ«²»½öÏÞÓÚ£º

¼¼ÊõÎ޹أº¸÷¸ö¿ª·¢ÍŶӶ¼¿ÉÒÔ×ÔÐÐÑ¡Ôñ¼¼ÊõÕ»£¬²»ÊÜͬһÏîÄ¿ÖÐÆäËüÍŶÓÓ°Ï죻

´úÂë¶ÀÁ¢£º¸÷¸ö½»¸¶²úÎï¶¼¿ÉÒÔ±»¶ÀÁ¢Ê¹Ó㬱ÜÃâºÍÆäËü½»¸¶²úÎïñîºÏ£»

Ñùʽ¸ôÀ룺¸÷¸ö½»¸¶²úÎïÖеÄÑùʽ²»»áÎÛȾµ½ÆäËü×é¼þ£»

Ô­ÉúÖ§³Ö£º¸÷¸ö½»¸¶²úÎï¶¼¿ÉÒÔ×ÔÓÉʹÓÃä¯ÀÀÆ÷Ô­Éú API£¬¶ø·ÇÒªÇóʹÓ÷â×°ºóµÄ API£»

ΪÁËÄܹ»ÊµÏÖ΢ǰ¶ËµÄÄ¿±ê£¬ÐèÒª¶ÔÏîÄ¿ÕûÌå½øÐвð·ÖºÍ¸ôÀë¡£

΢ǰ¶Ë½áºÏ΢·þÎñµÄ¼Ü¹¹

ÔçЩʱºò£¬ÎÒÃÇ¿ÉÄÜ»áÏëµ½ <iframe> £¬Ïë±Ø¶ÔÓÚ¡¸ÎªÊ²Ã´²»Óà <iframe>¡¹´ó¼Ò¶¼Äܸø³öÁ½Ö»ÊÖÊý²»¹ýÀ´µÄÀíÓÉÁË¡£

½üЩÄ꣬ÁíÒ»Ì× Web Ô­ÉúµÄ²ð·Ö¸ôÀë·½°¸Öð½¥½øÈëÈËÃǵÄÊÓÒ°£¬ÄDZãÊÇ Web Components¡£²»¹ý£¬ÕâÀï¶Ô Web Components Ò»Ñù³Ö·ñ¶¨Ì¬¶È¡£

Ϊʲô Web Components ²»ÊÇÒ»¸öÓÐЧ·½°¸

ΪÁËÁ˽â·ñ¶¨ Web Components µÄÔ­Òò£¬Ê×ÏȼòÒª½éÉÜһϠWeb Components ÊÇʲô¡£

https://www.webcomponents.org/

Web Components ÊÇÓÉ W3C ά»¤µÄ¼¼Êõ¸ÅÄ£¬Ä¿Ç°°üº¬*£º

Shadow DOM

Custom Elements

HTML Templates

CSS changes

ÕâËIJ¿·Ö¼¼ÊõÄÚÈÝ¡£

* Ôø¾­»¹°üº¬¹ý HTML Imports£¬µ«ÔçÒѱ»ÒƳý£¬ºÜ¶àÏà¹Ø×ÊÁ϶¼Ã»ÓиüС£

ÐèҪעÒâµÄÊÇ£¬ËäÈ» Web Components °üº¬ÄÄЩÄÚÈÝÊÇ W3C ά»¤µÄ£¬µ«ÊÇÀïÃæµÄ¼¼Êõ±¾Éí²¢²»ÊÇ£¬Shadow DOM¡¢Custom Elements ºÍ HTML Templates ¶¼ÊÇ HTML Living Standard ºÍ DOM Living Standard ÖеÄÕýʽÄÚÈÝ£¬ÓÉ WHATWG ά»¤¡£

Òò´Ë¶ÔÓÚ Web Components µÄ·ñ¶¨Éæ¼°µ½Á½¸ö²ãÃæ£º

×÷Ϊ½»»¥Öмä²ãµÄ³¡¾°Ï£¬Shadow DOM¡¢Custom Elements ºÍ HTML Templates ½â¾öµÄÎÊÌâÊÇÍêÈ«¶ÀÁ¢µÄ£ºShadow DOM ÓÃÓÚ¸¨ÖúÑùʽ¸ôÀ룬Custom Elements ÓÃÓÚ¼ò»¯Æô¶¯´úÂ룬¶ø HTML Templates ÓÃÓÚÄÚ²¿ÊµÏÖ¶ÔÖмä²ã·â×°ºÁÎÞ°ïÖú¡£×÷Ϊ¼¼ÊõÑ¡ÐͶøÑÔ£¬Ã¿¸öÎÊÌâµÄ½â¾ö·½°¸Ò²ÊÇÏ໥Õý½»µÄ£¬Òò´Ë Web Components Õâ¸öα¸ÅÄîÔڴ˲¢²»ÄÜ·¢»ÓÈκÎÕûÌå¼ÛÖµ£»

Shadow DOM¡¢Custom Elements ·Ö±ð¶¼²»ÊÇÏàÓ¦ÎÊÌâµÄÓÐЧ½â¾ö·½°¸£¬ÒÔÏ»áÏêϸ˵Ã÷¡£

ÖÁ´Ë£¬ÎÒÃÇÒѾ­¿ÉÒÔÍêÈ«Íüµô Web Components Õâ¸öα¸ÅÄֻ¿´¾ßÌå¼¼Êõ±¾Éí¡£

Ê×ÏÈÐèҪעÒâµÄÊÇ Shadow DOM ºÍ Custom Elements ¶¼Ö»ÓÐ IE11+ µÄ Polyfill Ö§³Ö£¬Òò´ËÐèÒª¿¼ÂÇ IE9 ºÍ IE10 µÄÓ¦ÓÿÉÒÔÖ±½ÓÅųý¡£µ«¼´±ã¶ÔÓÚÖ»ÐèÒª¿¼ÂÇ IE11+ µÄÓ¦ÓöøÑÔ£¬ÕâÁ½Ïî¼¼ÊõÒ²²¢·Ç×îÓŽ⡣

Custom Elements µÄÒþÐγɱ¾

Custom Elements Ó÷¨

Custom Elements ÓÃÓÚÀ©Õ¹ HTML Elements µÄ Registry£¬Èà HTML Parser ÒÔ¼°Äܹ»Ê¶±ð×Ô¶¨ÒåµÄÔªËØÃû*£¬²¢ÇÒ»¹Äܹ»×Ô¶¯´¥·¢ÏàÓ¦µÄÉùÃ÷ÖÜÆÚ¡£

* ׼ȷµÄ˵ Custom Elements °üº¬ Autonomous custom elements ºÍ Customized built-in elements Á½ÖÖÀàÐÍ£¬ÓÉÓÚºóÕß¼ÈûÓÐä¯ÀÀÆ÷µÄͳһԭÉúÖ§³Ö£¨Firefox Ðû²¼Á˲»»áÖ§³Ö£©Ò²Ã»ÓпÉÓÃµÄ Polyfill£¬Òò´Ë±¾ÎÄÖÐĬÈϽö½öÖ¸´úǰÕß¡£

ÓÐÁË Custom Elements Ö®ºó£¬Æô¶¯´úÂë¾ÍÊÇ HTML ±¾Éí£¨»òÕßÏàÓ¦µÄ DOM API µ÷Óã©£º

<book-cardtitle="Custom Elements"author="Web"price="42"></book-card>

ÒÔ¼°£º

constbookCard=document.('book-card')
bookCard.setAttribute('title','Custom Elements')
bookCard.setAttribute('author','Web')
bookCard.setAttribute('price','42')

ËäÈ»¿´ËƺÍÒ»°ãµÄ HTML Ä£°æ´úÂëÎÞÒ죬µ«ÊÂʵÉÏ Custom Elements ºÍ¿ò¼ÜÄ£°æÖÐÃ÷ÏÔ²»Í¬Ö®´¦µÄÊÇ£ºÃ»ÓÐ Scoping ºÍ Validation¡£

Èç¹ûÔªËØÃû³öÏÖÆ«²î»òÕß±»ÒÀÀµ×é¼þδ±»ÒýÈëÔËÐÐʱ£¬ÄÇô¾ÍÖ»»áµÃµ½Ò»¸ö HTMLUnknownElement£¬²¢²»»á³öÏÖÈκδíÎ󣬴ӶøÈÃÓû§µÃµ½²»Ô¤ÆÚµÄ½á¹û¡£

ÁíÍâ´Ó DOM ²Ù×÷Ò²ÄÜ¿´³öÒ»¸öÖ÷ÒªÎÊÌâËùÔÚ£ºDOM API ²»Ö§³ÖÅúÁ¿¸üС£

¶ÔÓÚÔ­ÉúµÄ DOM ²Ù×÷¶øÑÔ£¬ÕâÑùµ±È»²»»áÒý·¢Ê²Ã´ÎÊÌâ¡£²»¹ýÔÚµ±Ç°Ó¦ÓÃÖУ¬Custom Elements µÄÖ°ÔðÊÇÉúÃüÖÜÆÚ´úÀí£¬´¦Àí·½Ê½¾ÍÊÇÔÚ attributeChangedCallback ÉúÃüÖÜÆÚÖÐ֪ͨÆäËü¿ò¼Ü½øÐиüвÙ×÷¡£ÀàËÆÓÚ£º

classBookCardextendsHTMLElement {attributeChangedCallback (name: string,oldValue: string,newValue: string) {someOtherFramework.update({[name]:newValue})}}

¶øÒòΪûÓÐÅúÁ¿¸üУ¬ÉÏÊöÐÞ¸Ä title¡¢author ºÍ price µÄ³¡¾°ÖУ¬´¥·¢ÁËÕûÕûÈý´ÎÊý¾Ý¸üвÙ×÷£¬¶ø¶ÔÓÚ£¨¾ø´ó¶àÊý£©ÊÓͼͬ²½¿ò¼Ü¶øÑÔ£¬Êý¾Ý¸üлáÓй̶¨µÄ¶îÍâ³É±¾£¨¼´Ê¹Ã»ÓÐÈκÎÊÓͼÐ޸ģ©£¬²»½öÒýÆð²»±ØÒªµÄÐÔÄÜÀË·Ñͬʱ»¹¿ÉÄܽøÈë²»Ô¤ÆÚµÄÖмä״̬¡£

µ±È»´æÔÚһЩ Workaround£¬ÀýÈçÔÚ·â×°²ãͳһµÈ´ý nextTick£¬»òÕßʹÓýÓÊܶÔÏóµÄ DOM ÊôÐÔÀ´½øÐиüвÙ×÷£¬µ«ÊDz»ÂÛ¶ÔÓÚ¿Éά»¤ÐÔ»¹ÊÇÒ×ÓÃÐÔ¶øÑÔÈÔÈ»»áÔì³É¿É¹ÛµÄÓ°Ïì¡£

Shadow DOM ¶Ô·þÎñ¶ËäÖȾµÄ¸ß¶ÈÆÆ»µ

DOM Tree with Shadow Root

Shadow DOM V0 ÖÐÒýÈëÁË Content Projection µÄ»úÖÆ£¬Í¨¹ý <content> ÔªËØÊµÏÖ¡£Ö®ºóµÄ V1 °æ±¾ÖиÄΪ <slot> ÔªËØ¡£

ÎÒÃÇÖªµÀ£¬·þÎñ¶ËäÖȾÄܹ»Ö±½Ó²ú³ö¾²Ì¬ HTML ±»ä¯ÀÀÆ÷½âÎö£¬²»¹ý <slot> µÄ³öÏÖÈÃÕýÈ·µÄ·þÎñ¶ËäÖȾ±äµÃ²»¿ÉÄÜ¡£

¼ÙÉèÒ»¸ö×é¼þ¾ß±¸ÈçÏ嵀 Shadow DOM£º

<divclass="foo"><h4>Foo </h4><slot></slot>
</div>

±»ÈçÏ´úÂëʹÓãº

<element-details><p>Bar </p>
</element-details>

ÄÇôʵ¼ÊäÖȾ½á¹ûΪ£º

<element-details><divclass="foo"><h4>Foo </h4><p>Bar </p></div>
</element-details>

ÎÊÌâÔÚÓÚ£¬Èç¹ûÎÒÃÇÕæµÄÔÚ·þÎñ¶ËäÖȾ³ö¸Ã½á¹û£¬ÔÙ´Óä¯ÀÀÆ÷¶ËÆô¶¯£¬ÄÇô·þÎñ¶ËµÄäÖȾ½á¹û¾Í»á±»ÊÓΪԭʼÄÚÈÝ£¬ÔٴνøÐÐͶӰ£º

<element-details><divclass="foo"><h4>Foo </h4><divclass="foo"><h4>Foo </h4><p>Bar </p></div></div>
</element-details>

Ö®ËùÒÔ Web ¿ò¼ÜÖв»»á³öÏÖ¸ÃÎÊÌâ*£¬ÊÇÄܹ»¶ÔͶӰ¹ý³Ì½øÐпØÖÆ£¨Ê¹ÓöîÍâµÄÌØÊâÊôÐÔ½øÐбê×¢£©£¬¶øÔÚÔ­ÉúʵÏÖÖв¢Ã»ÓÐÏàÓ¦µÄ¿ØÖÆÈ¨£¬ÎÞ·¨Çø·ÖԭʼÄÚÈÝ£¬´Ó¶øµ¼Ö²»ÕýÈ·µÄ¶àÖØäÖȾ¡£

* ¸üÕæÊµµÄÔ­ÒòÊÇ´ó²¿·Ö Web ¿ò¼Üѹ¸ù¾Í²»Ö§³Ö´ÓÍⲿ HTML ³éÈ¡×ÓÄÚÈݽڵ㣬ֻÄÜÔÚ¿ò¼ÜÄÚ²¿Ê¹Óá£

ËùÒÔÈç¹ûҪʹÓà Shadow DOM£¬±ØÐëÈÃËùÓпª·¢ÈËԱǩÃû³Ðŵ¾ø²»Ê¹Óà <slot> ÔªËØ¡£¼´±ãÈç´Ë£¬Ò²»¹ÓÐÆäËü·½ÃæµÄÎÊÌ⣬ÀýÈç <style>¡£

ÓëÒ»°ãµÄ Web ¿ª·¢ÀíÄͬµÄÊÇ£¬Shadow DOM ÖÐʹÓÃÄÚǶµÄ <style> ÔªËØÊÇÍÆ¼öµÄ¿ª·¢·½Ê½£¨³ý´ËÖ®ÍâÖ»ÓÐ Inline Style ÓÐЧ£©£¬²¢ÇÒ½ö¶Ô Shadow Root ÓÐЧ¡£

¶øÒ»µ©½« <style> äÖȾΪ×ӽڵ㣬Äǽ«»á¶ÔÒ³ÃæÑùʽ²úÉú¼«´óµÄÆÆ»µ£º

<element-details><style>p{background-color:red}</style><p>Foo </p>
</element-details>
<p>Bar </p>

ËùÒÔ³ýÁË <slot> ÔªËØÖ®Í⣬<style> ÔªËØÒ²±ðÓÃÁË£¬ÀÏÀÏʵʵȫ²¿Ð´³É Inline Style °É¡£²»¹ýÎÊÌâÀ´ÁË£¬Ê¹Óà Shadow DOM µÄºËÐÄÄ¿µÄ¾ÍÊÇÑùʽ¸ôÀ룬²»ÄÜÊÜÒæÓڴ˵Ļ°ÎªÊ²Ã´»¹ÒªÓà Shadow DOM ÄØ£¿

½»¸¶²úÎïµÄÉ趨

ËùνµÄ¡¸Î¢Ç°¶Ë¡¹ÀíÄîÏ£¬½»¸¶²úÎï´óÌå¿ÉÒÔ·ÖΪ¼¸¸ö²»Í¬µÄ¼¶±ð£º

¶ÀÁ¢²¿ÊðµÄÍøÕ¾£º¿ª·¢ÍŶӵĹ¹½¨²úÎïΪ¶ÀÁ¢ÍøÕ¾²¢×ÔÐÐÍê³ÉÍøÕ¾µÄ²¿Êð£¬Í¨³£¶ÔÓ¦µÄ¼¯³É·½Ê½ÎªÔÚ¶à¸ö³¤µÃºÜÏñµÄÍøÕ¾Ö®¼äÌø×ª»òÕß <iframe> ±êÇ©ÒýÈëÍâ²¿Ò³Ãæ£»

ÍøÕ¾ÄÚÈÝ£º¿ª·¢ÍŶӵĹ¹½¨²úÎïΪ¶ÀÁ¢ÍøÕ¾µ«Í¨¹ýѹËõ°üÉÏ´«²¢²¿Êðµ½Í³Ò»Î»Öã¬Í¨³£¶ÔÓ¦µÄ¼¯³É·½Ê½Îª·þÎñÆ÷¶ËµÄ·´Ïò´úÀí£»

Ò³Ãæ½Å±¾£º¿ª·¢ÍŶӵĹ¹½¨²úÎïΪ Java ´úÂëÎļþ*²¢±»Õ¾µãÒýÈëµ½Õ¾µãÖУ»

* Ŀǰ´æÔÚÒ»¸ö HTML Modules Ìá°¸£¬ËäÈ»·¢²¼µÄÄÚÈÝÊÇ HTML Îļþµ«ÊÇÒýÈ뷽ʽÊÇ ES Module£¬ÕâÀïÒ²ÊÓΪ·¢²¼ Java ´úÂëµÄ·½Ê½¡£

¶øºóÔÚ·¢²¼ Java ´úÂëµÄ´ó·½Ïò֮ϣ¬´óÌåÓÖ¿ÉÒÔ·ÖΪÁ½¸öÀà±ð£º

·¢²¼×é¼þ£ºÆô¶¯Î»ÖúÍʱ»úÍêÈ«Óɸ¸¼¶ÄÚÈÝ¿ØÖÆ£¬Ö§³Ö¶àʵÀý£¬ÀýÈç Custom Elements£»

·¢²¼¾Ö²¿Ó¦ÓãºÆô¶¯¹ý³ÌÓÉ×ÔÉíÅäÖã¬Ö»Äܵ¥ÊµÀý£¬ÀýÈç single-spa£»

¿ÉÒÔ¼òµ¥µÄÀà±ÈΪ£¬Ç°Õß·¢²¼µÄÊÇ¡¸Àࡹ£¬ºóÕß·¢²¼µÄÊÇ¡¸ÊµÀý¡¹¡£ÕâÀïÎÒÃÇÑ¡ÔñǰÕߣ¬ËùÓз¢²¼µÄÄÚÈݶ¼ÊÇ¿ÉÒÔÖØÓõÄ×é¼þ£¬Óɸ¸×é¼þ¾ö¶¨ºÎʱ¼°ºÎ´¦Ê¹Óá£

ÓÉÓÚ֮ǰÒѾ­ÅųýÁË Custom Elements µÄÑ¡Ïµ±È»Ò²¾ÍÐèÒª¶¨ÒåеĽӿÚÀ´Âú×ã×é¼þ»¯µÄÐèÇó£¬Í¬Ê±±ÜÃâ Custom Elements ÖеÄȱÏÝ¡£

×é¼þ»¯Éè¼Æ

Custom Elements ÖеÄÉúÃüÖÜÆÚ

ÓÉÓÚÄ¿±ê½ö½öÊÇʵÏÖÉúÃüÖÜÆÚ´úÀí£¬×ÔÉí²¢²»ÐèÒªÊÓͼ¹ÜÀíµÄÖ§³Ö£¬ËùÒÔÒ»ÇÐÏÖÓеĿò¼Ü¶¼¹ýÖØ£¬¶øÇÒ²»¿É¿ØµÄ·çÏÕ¼«¸ß¡£Îª´ËÐèÒª×ÔÐж¨ÒåÒ»Ì× API£¬Ñ¡ÔñµÄ·½°¸Óкܶ࣬ÀýÈçÒ»¸öºÜ¼ò½éÓÐЧµÄÉè¼Æ¾ÍÊÇ Svelte µÄ get/set API£º

// Set state
component.set({value:42})
// Get state
const{value}=component.get()

ͨ¹ýͳһµÄ״̬¸üРAPI£¬Äܹ»ÓÐЧ½â¾öÅúÁ¿¸üеÄÎÊÌ⣺

component.set({title:'Svelte-style',author:'Svelte',price:42,})

ÖÁÓÚʼþͨÐÅ API ºÍÉúÃüÖÜÆÚ API ¾Í¿ÉÒÔ¸üÎªËæÒâÁË¡£

Ö®ºó£¬»¹ÐèÒª¿¼ÂÇ×é¼þÓë×é¼þÖ®¼äÈç¹û½¨Á¢ÒÀÀµ¹ØÏµ¡£Custom Elements ·½°¸ÖдæÔÚµÄÒ»¸öÏÔÖøÎÊÌâ¾ÍÊÇ¡¸×é¼þʹÓá¹Ó롸ÒÀÀµ½¨Á¢¡¹µÄÍѽڣ¬µ¥·´ÃæÒÀ¿¿Íⲿ»·¾³Ò»´ÎÐÔÒýÈëËùÓÐÄÚÈÝ¡£

Òª½¨Á¢ Java ÎļþÖ®¼äµÄÒÀÀµ¹ØÏµ£¬×îΪֱ¹ÛµÄ·½Ê½¾ÍÊÇ ES Module£¬ÀàËÆÓÚ£º

import{render,Component}from'@domain/mf-helpers'
import{MyComp1}from'@domain/lib1'
classMyComp2extendsComponent{someMethod(){render(MyComp1,myElement)}}

´ËÍ⻹¿ÉÒÔ¿¿ Dynamic Imports£¨Stage 3 Proposal£©´¦Àí¶¯Ì¬ÄÚÈݵÄÒÀÀµ£º

import{render,Component}from'@domain/mf-helpers'
classMyComp2extendsComponent{asyncsomeMethod() {const{MyComp1}= awaitimport('@domain/lib1')render(MyComp1,myElement)}}

»ùÓÚ ES Module ½¨Á¢µÄÒýÓùØÏµ£¬¿ÉÒÔÈÃ×é¼þµÄ¿ÉÓÃÐÔ±äµÃ¾ø¶Ô¿É¿¿¡£Èç¹û±»ÒÀÀµÄ£¿é¼ÓÔØÊ§°Ü£¬ÄÇôµ±Ç°Ä£¿éÒ²²»»á±»Ö´ÐУ¬´Ó¶ø½øÈ뵽ͳһµÄ´íÎó´¦ÀíÒ³Ãæ¡£µ±È»£¬ÔÚ Dynamic Import µÄ·½Ê½Ï£¬µ÷ÓÃÕß¿ÉÒÔ×ÔÐж¨Òå¾Ö²¿´íÎó´¦Àí£¬Ìṩ Fallback Ö§³Ö*¡£

* ³ý·ÇÓÐÃ÷È·µÄÓ¦Óñ߽磨ÀýÈçС³ÌÐò¼¶±ðµÄ¶ÀÁ¢×Ó³ÌÐò£©£¬·ñÔò Fallback ÐÐΪ²¢²»¿¿Æ×£¬¶ÔÓÚÕûÌåÓ¦ÓöøÑÔÒÀÀµ²»¿ÉÓõÄÇé¿öÏÂÓ¦¸ÃÁ¢¼´±¨´í£¬¶ø·Ç¾¡×î´óŬÁ¦ÔËÐС£

ÕâÑùÔÚÔ´Âë²ãÃæÉϼ«´ó±£Ö¤Á˿ɶÁÐԺͿÉά»¤ÐÔ£¬ÓÐЧÌáÉýÁË¿ª·¢Ð§ÂÊ¡£

µ±È»£¬ÎÒÃÇÖªµÀʵ¼ÊÓ¦ÓÃÖв¢²»»áÔÚÉú²ú»·¾³Ö±½ÓʹÓÃä¯ÀÀÆ÷µÄÄ£¿éÖ§³Ö£¬¶øÊÇÔ¤ÏȽøÐдò°ü¹¹½¨¡£ÎªÁ˱£³Ö¶ÀÁ¢²¿ÊðµÄÄ¿±ê£¬ÐèÒªÔÚ¹¹½¨¹ý³ÌÖÐÅųýÆäËü×é¼þµÄÒÀÀµ£¬²¢½«ÒÀÀµµÄÈ·¶¨¹ý³ÌÑÓÆÚµ½ÔËÐÐʱµÄ´¦Àí¡£

¶øÖÁÓÚÑùʽ¸ôÀ룬ֱ½Ó½»Óɸ÷¸öÍŶÓ×ÔÐд¦Àí¼´¿É£¬Ö÷Á÷¿ò¼Ü»ù±¾¶¼ÌṩÁË×é¼þÑùʽ½â¾ö·½°¸¡£´ËÍ⣬¿¿Ô¼¶¨Ç°×º²¢²»ÄܱÜÃâÑùʽ³åÍ»£¬ËäÈ»²»»áÎÛȾ¸¸×é¼þ£¬µ«ÈÔÈ»Äܹ»¶Ô×Ó×é¼þ²úÉúÎÛȾ¡££¨³ý·ÇֻʹÓø¸×ÓÑ¡ÔñÆ÷²»Óúó´úÑ¡ÔñÆ÷£©

Ò»°ãÔÚÕû¸öÓ¦ÓÃÖУ¬Ö»ÓÐijһ¼¶Ìض¨×é¼þ²Å»áʹÓ÷ÓÉ£¨Ã¿¸ö×é¼þÓò»Óõõ½×Ô¼ºÐÄÀïÓÐÊý£©£¬Òò´Ë×é¼þÉè¼ÆÖн«µ±Ç°µÄ basePath ºÍ navigationFn ¾­ÓÉ Context ²ã²ã´«µÝ£¬Èç¹ûÓÐij¸ö×é¼þÐèҪʵÏÖ×Ó·ÓÉ£¬×ÔÐзâ×°²¢±©Â¶µ½Ï¼¶¼´¿É¡£

¹¹½¨Ó벿Êð²ßÂÔ

֮ǰÒѾ­Ìáµ½£¬ÎªÁ˱£Ö¤¿ª·¢Ð§ÂÊ£¬Ô´ÂëÖнö½öʹÓà ES Module À´ÒýÈëÍⲿ×é¼þ£¬²»¹ý²¢²»´ò°üµ½µ±Ç°×é¼þÖУ¬¶øÊÇÍÆ³Ùµ½ÔËÐÐʱ¾ö¶¨¡£

ÕâÀï¿ÉÄÜ»á²úÉúµÄÒÉÎÊÊÇ£¬×é¼þÊÇ·ñÐèÒª·¢²¼µ½ Registry£¿

´ð°¸ÊÇÐèÒª*£¬ÎªÁËʵÏÖÁ½¸öÄ¿±ê£º

Library as a Constraint£ºÄ£¿éµ¼³ö¡¢ÀàÐÍÇ©ÃûÄܹ»¾²Ì¬È·¶¨£»

Registry as a CDN£º²»Í¬°æ±¾Í¬Ê±´¦ÓÚ¿É·ÃÎÊ״̬£»

* ¼¼Êõ²ãÃæÉÏÈÔÈ»ÊDz»ÐèÒªµÄ£¬Ö»ÐèÒª·¢²¼ºóµÄ URL ¼´¿É¡£

ÕâÀïµÄ Registry ²¢²»Ò»¶¨ÊÇ NPM Registry£¬ÈκÎÄܹ»Îȶ¨×·ËݵĻúÖÆ¾ù¿É£¬ÀýÈç Git Tags¡£

ËäÈ»¹¹½¨¹¤¾ß²ãÃæ²»ÒªÇó°²×°ÒÀÀµ£¬µ«ÊÇ×÷ΪÒÀÀµ°²×°Äܹ»ÓÐЧÌáÉý¿ª·¢ÌåÑ飬ÀýÈç±à¼­Æ÷µÄ´úÂëÌáʾ£¬Í¬Ê±°æ±¾·¢²¼Ó¦µ±·ûºÏÓïÒ廯°æ±¾ºÅµÄÒªÇ󣨲¢Äܹ»½øÐÐÔËÐÐʱÑéÖ¤£©¡£

ͬÑù£¬ËäÈ»ÔËÐÐʱÐèÒªµÄÖ»ÓÐ×é¼þ·¢²¼µÄ URL£¬È»¶øÍ¨¹ý Registry ·¢²¼Äܹ»»ñµÃÖî¶àÓÅÊÆ£º

È«°æ±¾ÊµÊ±¿ÉÓ㺷¢²¼Ð°汾²¢²»»áÌæ»»µôÔ­Óа汾£¬ËùÓа汾ͬʱ´¦ÓÚ¿ÉÓÃ״̬£¬Äܹ»Í¨¹ýÔÚ URL ÖÐÖ¸Ã÷°æ±¾½øÐзÃÎÊ£¬ÀýÈç https://unpkg.com/@angular/core@6.0.4 /bundles/core.umd.js£¬ÒÔÖÁÓÚÔÚÇл»°æ±¾£¨¸üлòÕß»ØÍË£©Ê±£¬²¢²»ÐèÒªÖØÐ²¿ÊðÏàÓ¦´úÂ룬¶ø½ö½öÐ޸İ汾ÅäÖÃÎļþ¼´¿É£»

Alias ×Ô¶¯¸üУºÎªÁË·½±ã×Ô¶¯Í¬²½£¬²âÊÔ»·¾³ÖпÉÒÔ²¢²»Ê¹ÓþßÌå°æ±¾ºÅ£¬¶øÊ¹Óà Alias£¬ÀýÈçÔÚ Staging »·¾³ÖÐʹÓà @stable£¬¾ÍÄÜÎÞÐèÅäÖÃ×Ô¶¯Í¬²½×îа汾£¬¿ìËÙÑéÖ¤¼æÈÝÐÔÎÊÌâ¡£

³ý´ËÖ®Í⣬ÐèÒªÒýÈëÔËÐÐʱµÄÒÀÀµ¹ÜÀí·½°¸¡£

ES Module ËäÈ»ÔÚËùÓÐÖ÷Á÷ä¯ÀÀÆ÷Öж¼ÒѾ­µÃµ½Ö§³Ö£¬µ«ÊǴ󲿷ÖÓ¦ÓÃÈÔÈ»ÐèÒªÕչ˲¿·ÖÀϾɰ汾£¬Í¬Ê± ES Module µÄÄ£¿éÒýÈë¹ý³ÌÎÞ·¨À¹½Ø£¬Òò´ËÎÞ·¨Ê¹ÓÃÔ­ÉúʵÏÖ¡£

µ±Ç°µÄÖ÷Á÷Ä£¿é¸ñʽÖУ¬Äܹ»ÓÃÓÚä¯ÀÀÆ÷ÔËÐÐʱµÄÖ»ÓÐ AMD ºÍ System.register Á½ÖÖ£¬Ïà±È֮ϺóÕßҪǿ´óµÄ¶à£¬¼¸ºõÌṩÁË ES Module µÄÓïÒåµÄÍêÕûÖ§³Ö£¨ÀýÈçÑ­»·ÒÀÀµºÍ¶¥²ãÒì²½µÈ´ý£©¡£Í¬Ê±£¬ºóÕßÒ²ÓÐ SystemJS ÕâÑùµÄÓÅÐ㹤¾ß£¬×Ô´øÀ©Õ¹Ö§³Ö£¬´Ó¶øÎÞÐè´ÓÁ㿪ʼ×ÔÐÐʵÏÖ¡£

ÀýÈç¶ÔÓÚ ES Module µÄ´úÂ룺

import{render,Component}from'@domain/mf-helpers'
import{MyComp1}from'@domain/lib1'
exportclassMyComp2extendsComponent{someMethod(){render(MyComp1,myElement)}}

´ò°üΪ System.registry ¸ñʽºóÊä³öΪ£º

System.register('@domain/lib2', ['@domain/mf-helpers','@domain/lib1'], function(exports,module) {'use strict';varrender,Component,MyComp1; return{setters:[function(module) {render=module.render;Component=module.Component;} ,function(module){MyComp1=module.MyComp1;}], execute:function() {classMyComp2extendsComponent{someMethod() {render(MyComp1,myElement);}} exports('MyComp2',MyComp2);}};});

 

ÕâÀïËäȻûÓÐÆäËüÍⲿÒÀÀµ£¬µ«ÐèҪעÒâµÄÊÇ£¬@domain Ö®ÍâµÄÆäËü×é¼þÄÚ²¿ÒÀÀµ²¢Ã»ÓÐʵʱ¸üеÄÒªÇ󣬿ÉÒÔÖ±½Ó´ò°üµ½ÎļþÖС£

ΪÁ˽øÐа汾ÑéÖ¤£¬ÐèÒª¶ÔÊä³öÄÚÈݽøÐв¿·ÖÀ©Õ¹£º

System.pkgInfo({name:'@domain/lib2',version:'1.0.1', dependencies: {'@domain/mf-helpers':{version:'^1.0.0'},' @domain/lib1':{version:'^1.2.3'},}});System.register(/* ... */);

´Ó¶øÄܹ»ÑéÖ¤ lib1 ºÍ lib2 ÊÇ·ñÆ¥Åä°æ±¾ÒªÇ󣨻¹¿ÉÒÔÓÐÆäËüºóÐøÀ©Õ¹ÓÃ;£©¡£

ËäÈ»ÕâÀォ mf-helpers ×÷ΪÍⲿÒÀÀµ£¬µ«ÊÇÍêȫӦµ±ÔÊÐíÄÚÁª£¬Òò´ËÆäÄÚ²¿ÊµÏÖ±ØÐëÍêÈ« Structural£¬´Ó¶ø±ÜÃ⸱±¾¼ä³åÍ»*¡£

* ׼ȷµÄ˵²¢Ã»ÓбÜÃ⣬ֻÊÇ֪ͨÏà¹ØÈËԱȥ½â¾ö¡£

ËùÒÔÔËÐÐʱÐèÒªÀ©Õ¹ System.register() ºÍ System.instantiate() Á½¸ö¹³×Ó£¬²¢Ôö¼Ó System.pkgInfo() µÄʵÏÖ¡£

ÒÀÀµ¿âµÄ¸´ÓÃ

ËäȻ΢ǰ¶ËµÄÄ¿±êÊÇ´úÂë¸ôÀ룬µ«ÊÇÈÔÈ»¿ÉÒÔÔÊÐí¿ª·¢ÈËÔ±Ö÷¶¯ÉùÃ÷µÄ¿É¸´ÓÃÄÚÈÝ¡£

ÔÚµ±Ç°µÄ·¢²¼·½Ê½Ï£¬¶Ô¿É¸´ÓÃÒÀÀµºÍ²»¿É¸´ÓÃÒÀÀµ½øÐвîÒ컯´¦ÀíÊ®·Ö¼òµ¥£º²»¿É¸´ÓÃÒÀÀµ´ò°üµ½×é¼þÄÚ²¿£¬¿É¸´ÓÃÒÀÀµ±£ÁôÄ£¿éÉùÃ÷¡£²»¹ýÈÔÈ»´æÔÚµÄÎÊÌâÊÇ£¬ÈçºÎʵÏֿɸ´ÓÃÒÀÀµµÄ¸´Óã¿

ΪÁËÄܹ»½øÐÐÒÀÀµ¸´Óã¬ÐèÒªÄܹ»¶ÔÒÀÀµ½øÐжÀÁ¢´ò°ü²¢¼Ç¼Æä URL£º

System.pkgInfo({name:'@domain/lib3',version:'1.0.1', dependencies: {'some-lib':{version:'^1.0.0',path:'./some-lib.js'},}});

ÓÚÊǵ± lib3 ±»ÔËÐÐʱ¼ÓÔØÊ±£¬»áÅжϵ±Ç°»·¾³ÖÐÊÇ·ñÒѾ­´æÔÚ¼æÈÝ ^1.0.0 °æ±¾µÄ some-lib °ü£¬Èç¹û²»´æÔÚ£¬ÔòÇëÇó¶ÔÓ¦µÄ URL »ñÈ¡¡£

²»¹ýÓ¦µ±×¢Ò⣬ͬһÒÀÀµµÄµ¥¸±±¾Óë¶à¸±±¾²îÒì¿ÉÒÔ»áÓ°ÏìÔËÐнá¹û£¬ÉùÃ÷¿É¸´ÓõÄÒÀÀµÊ±ÐèҪȷ±£Æä×ñÑ­ÓïÒ廯°æ±¾ºÅ²¢ÇÒûÓÐÄÚ²¿×´Ì¬£¬Í¬Ê±Ò²Ï£Íû×ÔÉíûÓÐÆäËüÍⲿÒÀÀµ¡£µ±È»ÏÖʵÖÐÒ²ºÜÈÝÒ×ÕÒµ½¿É¸´ÓÃÒÀÀµµÄµäÐÍ£¬±ÈÈç³£ÓõŤ¾ß¿â£ºlodash »òÕß moment¡£

ÔÚÏßʾÀý

ÕâÀïÖØÐ´ÁË https://micro-frontends.org/ÖеÄÈýÍŶÓÏîÄ¿£¬·Ö±ðÓÉ Angular¡¢React¡¢Vue ʵÏÖ£¬ÍêÃÀ¶ÔÓ¦ÑÕÉ«¹ØÏµ¡£

ʾÀýµØÖ·Îª£ºhttps://trotyl.github.io/ mif-demo-entry/£¬ÏàÓ¦µÄ×é¼þÔ´Âë·Ö±ðλÓÚ£º

trotyl/mif-demo-angular
trotyl/mif-demo-react
trotyl/mif-demo-vue

»ù´¡ÉèʩλÓÚ£º

trotyl/mif-core
trotyl/mif-runtime

ÓÉÓÚÎÄÕÂÊǹØÓÚ Micro-Frontend µÄÌÖÂÛ£¬Òò´ËʾÀý´úÂëÖй㷺ʹÓà mif ×÷Ϊǰ׺¡£

ʾÀýÖÐÒÔ×îÍâ²ã Red ÍŶÓ×é¼þ×÷Ϊ¸ù×é¼þÆô¶¯£º

const{render,ROOT_CONTEXT} =mif.coreSystem.import ('https://trotyl.github.io/mif-demo-angula r/demo-angular.mif.js') .then(m=>m.RedApp).then (RedApp=>render(RedApp,{context:ROOT_CONTEXT},document.body))

¿ÉÒÔ¿´³ö£¬ÎÄÕ·ֱð´ÓÈý¸ö²»Í¬µÄ GitHub Repo ÖмÓÔØÁË×é¼þ½Å±¾£¬¹²Í¬¹¹³ÉÁËÕâ¸öÍêÕûµ«Ç°¶ËÓ¦Óãº

Ò³Ãæ½Å±¾ÇëÇó

ͬʱ£¬ËäÈ»Èý¸ö×é¼þÖж¼Ê¹ÓÃÁË moment ×÷ΪÒÀÀµ£¬µ«ÓÉÓÚÉèÖÃÁËÔÊÐí¸´Óã¬ÔÚÕû¸öÓ¦ÓÃÖнö½ö±»¼ÓÔØÒ»´Î£¬Ö®ºó±»ËùÓÐ×é¼þËù¹²Óá£

ʾÀýÖÐʹÓõÄÁÙʱ֧³Ö¿âÈÔÈ»´æÔںܶàÎÊÌ⣬²¢²»½¨ÒéÖ±½ÓÔÚÕæÊµµÄ΢ǰ¶ËÏîĿʹÓá£

дÔÚ×îºó

΢ǰ¶ËÊÇÒ»¸ö¾Þ´óµÄ»°Ì⣬±¾ÎÄÓÉÓÚʱ¼ä¹ØÏµ£¬²¢Ã»ÓÐÉæ¼°µ½ËùÓпÉÄܵķ½Ãæ¡£ÔÚĿǰµÄºÜ¶àÍŶÓÖУ¬Î¢Ç°¶Ëʵ¼ùÍùÍùÒâζמ޴óµÄÎþÉü£¬ÀýÈç½ö½öΪÁËÓÅ»¯ËùνµÄ²¿Êðʱ¼ä£¬¾Í²»¹ËÒ»ÇÐµÄ·ÅÆúÓ¦ÓÃÐÔÄÜ¡¢´úÂëÖÊÁ¿¡¢¿ª·¢ÌåÑéµÈµÈ¡£¶ø±¾ÎĵÄÄ¿±êÔòÊÇ̽Ë÷Ò»Ìõ¾¡¿ÉÄܱ£Áôµ±Ç°Ç°¶ËÉú̬µÄÓÅÐãʵ¼ù£¬ÓÖÄܹ»Âú×ã΢ǰ¶Ë¿ª·¢ÀíÄîµÄ¾«Ö»¯·½°¸¡£

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

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

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

»ùÓÚHTML5¿Í»§¶Ë¡¢Web¶ËµÄÓ¦Óÿª·¢
HTML 5+CSS ¿ª·¢
ǶÈëʽC¸ßÖÊÁ¿±à³Ì
C++¸ß¼¶±à³Ì