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

1Ôª 10Ôª 50Ôª





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



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓÆµ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Model Center   Code  
»áÔ±   
   
 
     
   
 ¶©ÔÄ
  ¾èÖú
ÈçºÎ½â¹¹µ¥Ìåǰ¶ËÓ¦Ó᪡ªÎ¢Ç°¶ËÓ¦ÓõÄ΢·þÎñʽ²ð·Ö
 
  1863  次浏览      27
  2019-7-15
 
±à¼­ÍƼö:
±¾ÎÄÀ´×Ôsegmentfault£¬±¾ÎĽéÉÜÁËǰ¶Ë΢·þÎñ»¯Ë¼Ïë½éÉÜ£¬Î¢Ç°¶ËµÄËÄ´óÉè¼ÆÀíÄîÒÔ¼°ÕûÌåµÄ¹¤³ÌÁ÷³ÌµÈÏà¹ØÄÚÈÝ¡£

Ë¢ÐÂÒ³Ãæ£¿Â·Óɲð·Ö£¿No£¬¶¯Ì¬¼ÓÔØ×é¼þ¡£

±¾ÎÄ·ÖΪÒÔÏÂËIJ¿·Ö£º

ǰ¶Ë΢·þÎñ»¯Ë¼Ïë½éÉÜ

΢ǰ¶ËµÄÉè¼ÆÀíÄî

ʵս΢ǰ¶Ë¼Ü¹¹Éè¼Æ

»ùÓÚ Mooa ½øÐÐǰ¶Ë΢·þÎñ»¯

ǰ¶Ë΢·þ»¯

¶ÔÓÚǰ¶Ë΢·þ»¯À´Ëµ£¬ÓÐÕâôһЩ·½°¸£º

Web Component ÏÔÈ»¿ÉÒÔÒ»¸öºÜÓÅÐãµÄ»ù´¡¼Ü¹¹¡£È»¶ø£¬ÎÒÃDz¢²»¿ÉÄÜÈ¥´óÁ¿µØ¸´Ð´ÒÑÓеÄÓ¦Óá£

iFrame¡£ÄãÊÇËµÕæµÄÂð£¿

ÁíÍâÒ»¸ö΢ǰ¶Ë¿ò¼Ü Single-SPA£¬ÏÔÈ»ÊÇÒ»¸ö¸üºÃµÄ·½Ê½¡£È»¶ø£¬Ëü²¢·Ç Production Ready¡£

ͨ¹ý·ÓÉÀ´ÇзÖÓ¦Ó㬶øÕâ¸öÌø×ª»áÓ°ÏìÓû§ÌåÑé¡£

µÈµÈ¡£

Òò´Ë£¬µ±ÎÒÃÇ¿¼ÂÇǰ¶Ë΢·þÎñ»¯µÄʱºò£¬ÎÒÃÇÏ£Íû£º

¶ÀÁ¢²¿Êð

¶ÀÁ¢¿ª·¢

¼¼ÊõÎÞ¹Ø

²»Ó°ÏìÓû§ÌåÑé

¶ÀÁ¢¿ª·¢

ÔÚ¹ýÈ¥µÄ¼¸ÐÇÆÚÀÎÒ»¨·ÑÁË´óÁ¿µÄʱ¼äÔÚѧϰ Single-SPA µÄ´úÂë¡£µ«ÊÇ£¬ÎÒ·¢ÏÖËüÔÚ¿ª·¢ºÍ²¿ÊðÉÏÕæµÄÌ«Âé·³ÁË£¬ÍêÈ«´ï²»µ½¶ÀÁ¢²¿ÊðµØ±ê×¼¡£°´ Single-SPA µÄÉè¼Æ£¬ÎÒÐèÒªÔÚÈë¿ÚÎļþÖÐÉùÃûÎÒµÄÓ¦Óã¬È»ºó²ÅÄÜÈ¥¹¹½¨£º

declareChildApplication('inferno', () => import('src/inferno/inferno.app.js'), pathPrefix('/inferno'));

ͬʱ£¬ÔÚÎÒµÄÓ¦ÓÃÀÎÒ»¹ÐèҪȥָ¶¨ÎÒµÄÉúÃüÖÜÆÚ¡£Õâ¾ÍÒâζ×Å£¬µ±ÎÒ¿ª·¢ÁËÒ»¸öеÄÓ¦ÓÃʱ£¬±ØÐë¸üÐÂÁ½·Ý´úÂ룺Ö÷¹¤³ÌºÍÓ¦Óá£ÕâʱÎÒÃÇ»¹¼«¿ÉÄÜÔÚͬһ¸öÔ´ÂëÀ﹤×÷¡£

µ±³öÏÖ¶à¸öÍŶӵÄʱºò£¬ÔÚͬһ·ÝÔ´ÂëÀ﹤×÷£¬ÏÔÈ»±äµÃÏ൱µÄ²»¿É¿¿¡ª¡ª±ÈÈç˵£¬¶Ô·½ÍŶÓʹÓõÄÊÇ Tab£¬¶øÎÒÃÇʹÓõÄÊÇ 2 ¸ö¿Õ¸ñ£¬¸ô±ÚµÄÀÏÍõÓõÄÊÇ 4 ¸ö¿Õ¸ñ¡£

¶ÀÁ¢²¿Êð

Ò»¸öµ¥ÌåµÄǰ¶ËÓ¦ÓÃ×î´óµÄÎÊÌâÊÇ£¬¹¹½¨³öÀ´µÄ js¡¢css ÎļþÏ൱µÄ¾Þ´ó¡£¶øÎ¢Ç°¶ËÔòÒâζ×Å£¬Õâ¸öÎļþ±»¶ÀÁ¢µØ²ð·Ö³É¶à¸öÎļþ£¬ËüÃDZã¿ÉÒÔ¶ÀÁ¢È¥²¿ÊðÓ¦Óá£

ÎÒÃÇÕæµÄÐèÒª¼¼ÊõÎÞ¹ØÂð£¿

µÈµÈ£¬ÎÒÃÇÊÇ·ñÕæµÄÐèÒª¼¼ÊõÎ޹أ¿Èç¹ûÎÒÃDz»ÐèÒª¼¼ÊõÎ޹صϰ£¬Î¢Ç°¶ËÎÊÌâ¾ÍºÜÈÝÒ×½â¾öÁË¡£

ÊÂʵÉÏ£¬¶ÔÓڴ󲿷ֵĹ«Ë¾ºÍÍŶÓÀ´Ëµ£¬¼¼ÊõÎÞ¹ØÖ»ÊÇÒ»¸öÎÞ¹ØÍ´Ñ÷µÄ»°Êõ¡£µ±Ò»¼Ò¹«Ë¾µÄ¼¸¸ö´´Ê¼ÈËʹÓÃÁË Java£¬ÄÇô¼«ÓпÉÄÜÔÚδÀ´µÄÑ¡ÐÍÉϼÌÐøÊ¹Óà Java¡£³ý·Ç£¬Ò»Ð©¶îÍâµÄ·þÎñÀ´Ê¹Óà Python À´ÊµÏÖÈ˹¤ÖÇÄÜ¡£Òò´Ë£¬Ôڴ󲿷ֵÄÇé¿öÏ£¬ÈÔÈ»ÊǼ¼ÊõջΨһ¡£

¶ÔÓÚǰ¶ËÏîÄ¿À´Ëµ£¬¸üÊÇÈç´Ë£ºÒ»¸ö²¿ÃÅÀï»ù±¾ÉÏÖ»»áÑ¡ÓÃÒ»¸ö¿ò¼Ü¡£

ÓÚÊÇ£¬ÎÒÃÇÑ¡ÔñÁË Angular¡£

²»Ó°ÏìÓû§ÌåÑé

ʹÓ÷ÓÉÌø×ªÀ´½øÐÐǰ¶Ë΢·þÎñ»¯£¬ÊÇÒ»Öֺܼòµ¥¡¢¸ßЧµÄÇзַ½Ê½¡£È»¶ø£¬Â·ÓÉÌø×ªµØ¹ý³ÌÖУ¬»áÓÐÒ»¸ö°×ÆÁµÄ¹ý³Ì¡£ÔÚÕâ¸ö¹ý³ÌÖУ¬Ìø×ªÇ°µÄÓ¦Óúͽ«ÒªÌø×ªµÄÓ¦Ó㬶¼Ê§È¥Á˶ÔÒ³ÃæµÄ¿ØÖÆÈ¨¡£Èç¹ûÕâ¸öÓ¦ÓóöÁËÎÊÌ⣬ÄÇôÓû§¾Í»áÒ»Á³ã±ơ£

ÀíÏëµÄÇé¿öÏ£¬ËüÓ¦¸Ã¿ÉÒÔ±»¿ØÖÆ¡£

΢ǰ¶ËµÄÉè¼ÆÀíÄî

Éè¼ÆÀíÄîÒ»£ºÖÐÐÄ»¯Â·ÓÉ

»¥ÁªÍø±¾ÖÊÊÇÈ¥ÖÐÐÄ»¯µÄÂ𣿲»£¬DNS ¾ö¶¨ÁËËü²»ÊÇ¡£TAB£¬¾ö¶¨ÁËËü²»ÊÇ¡£

΢·þÎñ´Ó±¾ÖÊÉÏÀ´Ëµ£¬ËüÓ¦¸ÃÊÇÈ¥ÖÐÐÄ»¯µÄ¡£µ«ÊÇ£¬ËüÓÖ²»ÄÜÊÇÍêÈ«µÄÈ¥ÖÐÐÄ»¯¡£¶ÔÓÚÒ»¸ö΢·þÎñÀ´Ëµ£¬ËüÐèÒªÒ»¸ö·þÎñ×¢²áÖÐÐÄ£º

·þÎñÌṩ·½Òª×¢²áͨ¸æ·þÎñµØÖ·£¬·þÎñµÄµ÷Ó÷½ÒªÄÜ·¢ÏÖÄ¿±ê·þÎñ¡£

¶ÔÓÚÒ»¸öǰ¶ËÓ¦ÓÃÀ´Ëµ£¬Õâ¸ö¶«Î÷¾ÍÊÇ·ÓÉ¡£

´ÓÒ³ÃæÉÏÀ´Ëµ£¬Ö»ÓÐÎÒÃÇÔÚÍøÒ³ÉÏÌí¼ÓÒ»¸ö²Ëµ¥Á´½Ó£¬Óû§²ÅÄÜÖªµÀij¸öÒ³ÃæÊÇ¿ÉÒÔʹÓõġ£

¶ø´Ó´úÂëÉÏÀ´Ëµ£¬ÄǾÍÊÇÎÒÃÇÐèÒªÓÐÒ»¸öµØ·½À´¹ÜÀíÎÒÃǵÄÓ¦Óãº**·¢ÏÖ´æÔÚÄÄЩӦÓã¬ÄĸöÓ¦ÓÃʹÓÃÄĸö·ÓÉ¡£

¹ÜÀíºÃÎÒÃǵÄ·ÓÉ£¬Êµ¼ÊÉϾÍÊǹÜÀíºÃÎÒÃǵÄÓ¦Óá£

Éè¼ÆÀíÄî¶þ£º±êʶ»¯Ó¦ÓÃ

ÔÚÉè¼ÆÒ»¸ö΢ǰ¶Ë¿ò¼ÜµÄʱºò£¬ÎªÃ¿¸öÏîĿȡһ¸öÃû×ÖµÄÎÊÌâ¾À½áÁËÎҺܾ᪡ªÔõôȥ¹æ·¶»¯Õâ¸ö¶«Î÷¡£Ö±µ½£¬ÎÒÔÙÒ»´ÎÏëµ½ÁË¿µÍþ¶¨ÂÉ£º

ϵͳÉè¼Æ(²úÆ·½á¹¹µÈͬ×éÖ¯ÐÎʽ£¬Ã¿¸öÉè¼ÆÏµÍ³µÄ×éÖ¯£¬Æä²úÉúµÄÉè¼ÆµÈͬÓÚ×éÖ¯Ö®¼äµÄ¹µÍ¨½á¹¹¡£

»»¾äÈË»°Ëµ£¬¾ÍÊÇͬһ¸ö×é֯ϣ¬²»¿ÉÄÜÓÐÁ½¸öÏîÄ¿µÄÃû³ÆÊÇÒ»ÑùµÄ¡£

ËùÒÔ£¬Õâ¸öÎÊÌâºÜ¼òµ¥¾Í½â¾öÁË¡£

Éè¼ÆÀíÄîÈý£ºÉúÃüÖÜÆÚ

Single-SPA Éè¼ÆÁËÒ»¸ö»ù±¾µÄÉúÃüÖÜÆÚ£¨ËäÈ»ËüûÓÐͳһ¹ÜÀí£©£¬Ëü°üº¬ÁËÎåÖÖ״̬£º

load£¬¾ö¶¨¼ÓÔØÄĸöÓ¦Ó㬲¢°ó¶¨ÉúÃüÖÜÆÚ

bootstrap£¬»ñÈ¡¾²Ì¬×ÊÔ´

mount£¬°²×°Ó¦Óã¬Èç´´½¨ DOM ½Úµã

unload£¬É¾³ýÓ¦ÓõÄÉúÃüÖÜÆÚ

unmount£¬Ð¶ÔØÓ¦Óã¬Èçɾ³ý DOM ½Úµã

ÓÚÊÇ£¬ÎÒÔÚÉè¼ÆÉÏ»ù±¾ÉÏÑØÓÃÁËÕâ¸öÉúÃüÖÜÆÚ¡£ÏÔÈ»£¬ÖîÈç load Ö®Àà¶ÔÓÚÎÒµÄÉè¼ÆÊǶàÓàµÄ¡£

Éè¼ÆÀíÄîËÄ£º¶ÀÁ¢²¿ÊðÓëÅäÖÃ×Ô¶¯»¯

´ÓijÖÖÒâÒåÉÏÀ´Ëµ£¬Õû¸öÿϵͳÊÇÎ§ÈÆ×ÅÓ¦ÓÃÅäÖýøÐеġ£Èç¹ûÓ¦ÓõÄÅäÖÃÄÜ×Ô¶¯»¯£¬ÄÇôÕû¸öϵͳ¾Í×Ô¶¯»¯¡£

µ±ÎÒÃÇÖ»¿ª·¢Ò»¸öеÄ×é¼þ£¬ÄÇôÎÒÃÇÖ»ÐèÒª¸üÐÂÎÒÃǵÄ×é¼þ£¬²¢¸üÐÂÅäÖü´¿É¡£¶øÕâ¸öÅäÖñ¾ÉíÒ²Ó¦¸ÃÊÇÄÜ×Ô¶¯Éú³ÉµÄ¡£

ʵս΢ǰ¶Ë¼Ü¹¹Éè¼Æ

»ùÓÚÒÔÉϵÄǰÌᣬϵͳµÄ¹¤×÷Á÷³ÌÈçÏÂËùʾ£º

ÕûÌåµÄ¹¤³ÌÁ÷³ÌÈçÏÂËùʾ£º

Ö÷¹¤³ÌÔÚÔËÐеÄʱºò£¬»áÈ¥·þÎñÆ÷»ñÈ¡×îеÄÓ¦ÓÃÅäÖá£

Ö÷¹¤³ÌÔÚ»ñÈ¡µ½ÅäÖú󣬽«Ò»Ò»´´½¨Ó¦Ó㬲¢ÎªÓ¦Óðó¶¨ÉúÃüÖÜÆÚ¡£

µ±Ö÷¹¤³Ì¼à²âµ½Â·Óɱ仯µÄʱºò£¬½«Ñ°ÕÒÊÇ·ñÓжÔÓ¦µÄ·ÓÉÆ¥Åäµ½Ó¦Óá£

µ±Æ¥Åä¶Ô¶ÔÓ¦Ó¦ÓÃʱ£¬Ôò¼ÓÔØÏàÓ¦µÄÓ¦Óá£

¹Ê¶ø£¬Æä¶ÔÓ¦µÄ¼Ü¹¹ÈçÏÂͼËùʾ£º

¶ÀÁ¢²¿ÊðÓëÅäÖÃ×Ô¶¯»¯

ÎÒÃÇ×öµÄ²¿Êð²ßÂÔÈçÏ£ºÎÒÃǵÄÓ¦ÓÃʹÓõÄÅäÖÃÎļþ½Ð apps.json£¬ÓÉÖ÷¹¤³ÌÈ¥»ñÈ¡Õâ¸öÅäÖá£Ã¿´Î²¿ÊðµÄʱºò£¬ÎÒÃÇÖ»ÐèÒª½« apps.json Ö¸Ïò×îеÄÅäÖÃÎļþ¼´¿É¡£ÅäÖõÄÎļþÀàÈçÏÂËùʾ£º

96a7907e5488b6bb.json
6ff3bfaaa2cd39ea.json
dcd074685c97ab9b.json

Ò»¸öÓ¦ÓõÄÅäÖÃÈçÏÂËùʾ£º

{
"name": "help",
"selector": "help-root",
"baseScriptUrl": "/assets/help",
"styles": [
"styles.bundle.css"
],
"prefix": "help",
"scripts": [
"inline.bundle.js",
"polyfills.bundle.js",
"main.bundle.js"
]
}

ÕâÀïµÄ selector ¶ÔÓ¦ÓÚÓ¦ÓÃËùÐèÒªµÄ DOM ½Úµã£¬prefix ÔòÊÇÓÃÓÚ URL ·ÓÉÉÏ¡£ÕâЩ¶¼ÊÇ×Ô¶¯´Ó index.html ÎļþºÍ package.json ÖлñÈ¡Éú³ÉµÄ¡£

Ó¦Óüä·ÓÉ¡ª¡ªÊ¼þ

ÓÉÓÚÏÖÔÚµÄÓ¦Óñä³ÉÁËÁ½²¿·Ö£ºÖ÷¹¤³ÌºÍÓ¦Óò¿·Ö¡£¾Í»á³öÏÖÒ»¸öÎÊÌ⣺ֻÓÐÒ»¸ö¹¤³ÌÄܲ¶»ñ·Óɱ仯¡£µ±ÓÉÖ÷¹¤³ÌÈ¥¸Ä±äÓ¦ÓõĶþ¼¶Â·ÓÉʱ£¬¾ÍÎÞ·¨ÓÐЧµØ´«´ïµ½×ÓÓ¦Óá£ÔÚÕâʱ£¬Ö»ÄÜͨ¹ýʼþµÄ·½Ê½È¥Í¨Öª×ÓÓ¦Óã¬×ÓÓ¦ÓÃÒ²ÐèÒª¼à²âÊÇ·ñÊǵ±Ç°Ó¦ÓõÄ·ÓÉ¡£

if (event.detail.app.name === appName) {
let urlPrefix = 'app'
if (urlPrefix) {
urlPrefix = `/${window.mooa.option.urlPrefix}/`
}
router.navigate([event.detail.url.replace(urlPrefix + appName, '')])
}

ÏàËÆµÄ£¬µ±ÎÒÃÇÐèÒª´ÓÓ¦Óà A Ìø×ªµ½Ó¦Óà B ʱ£¬ÎÒÃÇÒ²ÐèÒªÕâÑùµÄÒ»¸ö»úÖÆ£º

window.addEventListener('mooa.routing.navigate', function(event: CustomEvent) {
const opts = event.detail
if (opts) {
navigateAppByName(opts)
}
})

ʣϵÄÖîÈç Loading ¶¯»­Ò²ÊÇÀàËÆµÄ¡£

ʹÓà Mooa ½øÐÐ

So£¬ÎÒÃǾÍÓÐÁËǰ¶Ë΢·þÎñ¿ò¼Ü Mooa¡£Ëü»ùÓÚ single-spa && single-spa-angular-cli£¬²¢ÇÒ·ûºÏÒÔÉϵÄÉè¼ÆË¼Ïë¡£

GayHub µØÖ·£ºhttps://github.com/phodal/mooa

¶ÔÓÚÖ÷¹¤³Ì¶øÑÔ£¬Ö»ÐèÒªÒÔϵļ¸ÐдúÂë¾Í¿ÉÒÔÍê³ÉÉÏÃæµÄ¹¦ÄÜ£º

http.get<any[]>('/assets/apps.json')
.subscribe(data => {
data.map((config) => {
that.mooa.registerApplication(config.name, config, mooaRouter.matchRoute(config.prefix));
});
this.mooa.start();
});

this.router.events.subscribe((event: any) => {
if (event instanceof NavigationEnd) {
that.mooa.reRouter(event);
}
});

²¢Ìí¼ÓÒ»¸ö¶ÔÓ¦µÄ×ÓÓ¦Ó÷ÓÉ£º

{
path: 'app/:appName/:route',
component: HomeComponent
}

ÔòÈçÉÏËùÊöµÄËĸö²½Öè¡£

¶ÔÓÚ×Ó¹¤³Ì¶øÑÔ£¬ÔòÖ»ÐèÒªÒ»¸ö¶ÔÓ¦µÄ Hook ²Ù×÷£º

mooaPlatform.mount('help').then((opts) => {
platformBrowserDynamic().bootstrapModule(AppModule) .then((module) => {
opts['attachUnmount'](module);
});
});

²¢ÉèÖúöÔÓ¦µÄ base_href:

providers: [
{provide: APP_BASE_HREF, useValue: mooaPlatform.appBase()},
]

àÅ£¬¾ÍÊÇÕâô¼òµ¥¡£DEMO ÊÓÆµÈçÏ£º

Demo µØÖ·¼û£ºhttp://mooa.phodal.com/

GitHub ʾÀý£ºhttps://github.com/phodal/mooa

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

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

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

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