Skip to content

Merak设计思路

凡是能在编译完成的,不要交给运行时

其实最早,这个方案更像是garfish中的esmloader,是一个纯粹的运行时方案,先请求来js,在worker中编译,创建虚拟url,然后挂载到页面。

但当我处理publicpath的时候,发现base标签动态更改不起效,也无法直接修正img等元素的baseurl,即使劫持诸如imgsrc等属性(无界就是这么做的),也不是一个好办法(因为有可能直接更改innerHtml,除非你愿意在运行时中放入一个html编译器)。

我发现最有效的仍是在子应用端设置publicpath

这个时候我就感觉,也许一味追求子应用无改造不是一个好选择,实际上也不可能:子应用中要么需要设置路由的base,要么需要分辨是否为子应用,并执行对应的逻辑,如果遇上依赖库有某种bug,这种改造会更加繁琐。

我也许可以在编译处动点手脚,把子应用改造的多一点,让运行时少做一点

merak做了什么

编译时

merak现在在编译端做了三件事,

  1. 把需要被隔离的变量,找出来并更改指向,
  2. 是把样式规则改为符合shadowroot的格式(root to host),
  3. 是找到htmlscript,link等的入口

如果要对merak做自定义的改造,请沿袭这个思路,在编译时多动点手脚

Released the MIT License.