首页 > 编程语言 >微前端之四 • Single SPA 的源码实现

微前端之四 • Single SPA 的源码实现

时间:2022-11-19 11:35:33浏览次数:68  
标签:Github js Single 源码 应用 之四 SPA

深入了解一个库最好的办法是直接去看源代码,学习作者的设计模式、运行原理、代码风格等。并且动手跑起来,碰到不懂的地方打断点或者打印关键信息,一步一步去琢磨。

很多流行库发展多年后,优化工作越做越好,但同时会变得比较臃肿,代码量大且文件分散,直接看最新版本的源代码可能无从下手。我是这么实践的,先去看它的第一个发行版,一般来说首次发行版的代码简洁,设计模式和原理与后面的版本不会有太大的变化。

Single SPA 的1.0.0 版本是7年前发布的,只有一个文件,一共不到400行代码,非常方便阅读。Github 选择 branch 的地方有一个 tags 的选项,点开可以看到每个版本对应的源码。我克隆了一份放在自己的 Github,加上了注释,并且添加了更容易理解的接入样例,地址:https://github.com/WinjayYu/the-single-spa

根目录下面的 index.html 相当于基座应用,这里作了简化处理。首先需要引入 System.js 模块加载器,它支持动态引入 js 模块。

我们平时使用 webpack 开发的时候,所有的组件在打包后就已经变成了非模块化的 js ,所以无论浏览器是否支持模块加载都可以顺利执行。随着 ES6 的普及,越来越多的浏览器开始支持 ES Module,但是兼容性还不好,SystemJS 是现阶段下(浏览器尚未正式支持importMap)原生 ES Module 的替代品。

随后引入 Single SPA 库,然后就可以调用 declareChildApplication 注册子应用了。注册方法需要两个参数,第一个是子应用暴露给基座的配置文件,主要包括了生命周期函数;第二个是触发条件,检测当前路由是否和子应用匹配。

上图中 src/index.js 是 Single SPA 的源码,实现细节请参考 Github 仓库。下面是通过源码逻辑画的流程图,直观地展示子应用从加载到销毁的过程:

其中比较关键的是劫持 window 的 popstate 和 hashchange 监听方法 。保证 Single SPA 先感知到路由的变化,根据路由挂载指定的子应用,待子应用挂载完整后,再执行 popstate 和 hashchange 原来的监听方法。

可以看到,微前端的原理并不复杂,它其实是一种约定的架构风格。做好一件事情往往并不依赖多么前沿的技术,但需要大家的互相协作,按照统一的约定风格开发。

标签:Github,js,Single,源码,应用,之四,SPA
From: https://www.cnblogs.com/billyu/p/16905727.html

相关文章

  • mybatis源码解析1
    一、mybatis的简单使用根据mybatis官网提供的例子,需要这么几个步骤1、获取mybatis配置文件的输入流对象2、创建SqlSessionFactoryBuilder对象3、调用SqlSessionFactor......
  • 数据库处理封装 GotDotNet.ApplicationBlocks.Data AdoHelper Dao 源码
    数据库处理封装GotDotNet.ApplicationBlocks.DataAdoHelperDao源码在GotDotNet.ApplicationBlocks.DataAdoHelper源码的基础上进行封装处理使调用更方便。支持所有常......
  • Seata 1.5.2 源码学习(Client端)
    在上一篇中通过阅读Seata服务端的代码,我们了解到TC是如何处理来自客户端的请求的,今天这一篇一起来了解一下客户端是如何处理TC发过来的请求的。要想搞清楚这一点,还得从Glob......
  • k8s源码分析2-命令行工具cobra的使用
    本节重点介绍:kubectl的职责和kubectl的代码原理cobra库的使用简介kubectl的职责主要的工作是处理用户提交的东西(包括,命令行参数,yaml文件等)然后其会把用户提交......
  • 《STL 源码剖析》 deque 实现原理
    目录deque概述deque中控器deque迭代器和数据结构deque操作原理deque随机存储deque插入deque删除deque和stack、queue的关系deque概述deque是双向开口的连续线性空间......
  • 如何修改npm包源码后,重新npm包的时候能是修改后的版本
    肯定是clone一份到gitHub啦保存一份修改后的npm包到自己的私有库npm安装git仓库的方式npminstall<gitremoteurl>例如npminstallgithub:mygithubuser/mypro......
  • html字符串转pdf源码
        ///<summary>     ///将Html文字输出到PDF     ///</summary>     ///<paramname="htmlText......
  • Vue3源码解读之patch
    例子代码本篇将要讲解domdiff,那么咱们结合下面的例子来进行讲解,这个例子是在上一篇文章的基础上,加了一个数据变更,也就是list的值发生了改变。html中增加了一个按钮change......
  • 如何正确学习vue3.0源码
    为什么要学源码技术是第一生产力学习API的设计目的、思路、取舍学习优秀的代码风格学习组织代码的方式学习实现方法的技巧学习ES67新API、TS高级用法不给自......
  • 上帝视角看Vue源码整体架构+相关源码问答
    前言这段时间利用课余时间夹杂了很多很多事把Vue2源码学习了一遍,但很多都是跟着视频大概过了一遍,也都画了自己的思维导图。但还是对详情的感念模糊不清,故这段时间对源码......