# 一、Umi简介
一个可插拔的企业级
react应用框架。umi以路由为基础的,以及各种进阶的路由功能,并以此进行功能扩展,比如支持路由级的按需加载。然后配以完善的插件体系,覆盖从源码到构建产物的每个生命周期
# 1.1 特性
- 开箱即用,内置
react、react-router等 - 支持配置的路由方式
- 完善的插件体系,覆盖从源码到构建产物的每个生命周期
- 高性能,通过插件支持
PWA、以路由为单元的code splitting等 - 支持静态页面导出,适配各种环境,比如中台业务、无线业务、egg、支付宝钱包、云凤蝶等
- 开发启动快,支持一键开启
dll和hard-source-webpack-plugin等 - 一键兼容到
IE9,基于umi-plugin-polyfills - 完善的
TypeScript支持,包括d.ts定义和umi test - 与
dva数据流的深入融合,支持duck directory、model的自动加载、code splitting等等
# 1.2 架构

# 1.3 和 dva、roadhog关系
roadhog是基于webpack的封装工具,目的是简化webpack的配置 umi 可以简单地理解为roadhog + 路由,思路类似next.js/nuxt.js,辅以一套插件机制,目的是通过框架的方式简化React开发dva目前是纯粹的数据流,和umi以及roadhog之间并没有相互的依赖关系,可以分开使用也可以一起使用
# 二、环境搭建
$ mkdir myapp && cd myapp
$ yarn create umi
@前端进阶之旅: 代码已经复制到剪贴板

确定后,会根据你的选择自动创建好目录和文件

# 三、目录结构
dva项目之前通常都是这种扁平的组织方式
+ models
- global.js
- a1.js
- a2.js
- b.js
+ services
- a.js
- b.js
+ routes
- PageA.js
- PageB.js
@前端进阶之旅: 代码已经复制到剪贴板
用了
umi后,可以按页面维度进行组织
+ models/global.js
+ pages
+ a
- index.js
+ models
- a1.js
- a2.js
+ services
- a.js
+ b
- index.js
- model.js
- service.js