umijs 原理
包分析
umi 的微内核架构本质是配置收集器和插件管理器。
umi
cli 理用户命令。export 运行时用的方法、组件
@umi/core
Service
核心服务类
注册 plugin 和 presets。生成 config 实例。
Config
初始化用户 config 配置,merge config,watch config(watch 依赖了第三方库 chokidar
)
Route
处理约定式路由
@umi/runtime
从第三方库
history-with-query
暴露了 History 相关方法从第三方库
react-router-dom
暴露了 react-router 的路由组件和路由 hooks复制了
react-loadable
代码,封装了Loadable
,然后暴露了dynamic
方法来做 react code splitting暴露了
Plugin
类 和isBrowser
方法
运行时
import { xxx } from 'umi'
index.ts 文件 export 了 @umijs/runtime
运行时的组件方法,如 Link
useHistory
等。
通过 export * from '@@/core/umiExports'
暴露出所有 umi 的插件暴露的东西。(@@
指向项目目录的 src/.umi
)
.umi 文件
umi.ts —— 直接看源码
polifile、render、hotreload
core —— 内部插件生成
- routes.ts —— 动态生成了路由
- plugins.ts —— 插件列表
- history.ts —— 动态暴露
history
- ...
pluginA..B..C.. —— 外部插件生成