以前写完了dva入门系列,它只是一个纯粹的数据流框架,拿来开发是没有问题的.可是仍是有一些繁琐的步骤,每次要手动注册model,手写route路由.Umi的出现结合dva,使得开发更加的优雅与便捷.
📦 开箱即用,内置 react、react-router 等
🏈 类 next.js 且功能完备的路由约定,同时支持配置的路由方式
🎉 完善的插件体系,覆盖从源码到构建产物的每一个生命周期
🚀 高性能,经过插件支持 PWA、以路由为单元的 code splitting 等
💈 支持静态页面导出,适配各类环境,好比中台业务、无线业务、egg、支付宝钱包、云凤蝶等
🚄 开发启动快,支持一键开启 dll 和 hard-source-webpack-plugin 等
🐠 一键兼容到 IE9,基于 umi-plugin-polyfills
🍁 完善的 TypeScript 支持,包括 d.ts 定义和 umi test
🌴 与 dva 数据流的深刻融合,支持 duck directory、model 的自动加载、code splitting 等等css
1.安装umireact
npm install -g umi
2.检查webpack
umi -v
3.安装脚手架git
npm install -g create-umi
4.使用脚手架初始化工程web
create-umi
选择>project,而后选择依赖,这节课先选择antd,不选择dva.
5.运行项目
进入项目目录,先安装依赖,而后运行express
npm install npm start
6.浏览器访问
若是顺利,在浏览器打开 http://localhost:8000 可看到如下界面,npm
脚手架自动生成了一些目录,你须要按约定的方式去写,umi才能正常运行一个复杂应用的目录结构以下:json
. ├── dist/ // 默认的 build 输出目录 ├── mock/ // mock 文件所在目录,基于 express ├── config/ ├── config.js // umi 配置,同 .umirc.js,二选一 └── src/ // 源码目录,可选 ├── layouts/index.js // 全局布局 ├── pages/ // 页面目录,里面的文件即路由 ├── .umi/ // dev 临时目录,需添加到 .gitignore ├── .umi-production/ // build 临时目录,会自动删除 ├── document.ejs // HTML 模板 ├── 404.js // 404 页面 ├── page1.js // 页面 1,任意命名,导出 react 组件 ├── page1.test.js // 用例文件,umi test 会匹配全部 .test.js 和 .e2e.js 结尾的文件 └── page2.js // 页面 2,任意命名 ├── global.css // 约定的全局样式文件,自动引入,也能够用 global.less ├── global.js // 能够在这里加入 polyfill ├── .umirc.js // umi 配置,同 config/config.js,二选一 ├── .env // 环境变量 └── package.json
敲黑板,知识点:
umi是按page来划分的,每个page里只有本身的model,service,util等。不像dva的目录结构,全部的model,service,page统一管理。就看你喜欢什么样的管理方式了。api
默认输出路径,可经过配置 outputPath 修改。浏览器
约定 mock 目录里全部的 .js 文件会被解析为 mock 文件。
好比,新建 mock/users.js,内容以下:
export default {
'/api/users': ['a', 'b'],
}
而后在浏览器里访问 http://localhost:8000/api/users 就能够看到 ['a', 'b'] 了。
约定 src 为源码目录,可是可选,简单项目能够不加 src 这层目录。
好比:下面两种目录结构的效果是一致的。
src
pages
layouts
pages
layouts
全局布局,其实是在路由外面套了一层。
好比,你的路由是:
[
{ path: '/', component: './pages/index' },
{ path: '/users', component: './pages/users' },
]
若是有 layouts/index.js,那么路由则变为:
[
{ path: '/', component: './layouts/index', routes: [
{ path: '/', component: './pages/index' }, { path: '/users', component: './pages/users' },
] }
]
约定 pages 下全部的 (j|t)sx? 文件即路由。关于更多关于约定式路由的介绍,请前往路由章节。
404 页面。注意开发模式下有内置 umi 提供的 404 提示页面,因此只有显式访问 /404 才能访问到这个页面。
有这个文件时,会覆盖默认的 HTML 模板。需至少包含如下代码,
<div id="root"></div>
这是 umi dev 时生产的临时目录,默认包含 umi.js 和 router.js,有些插件也会在这里生成一些其余临时文件。能够在这里作一些验证,但请不要直接在这里修改代码,umi 重启或者 pages 下的文件修改都会从新生成这个文件夹下的文件。
同 src/pages/.umi,可是是在 umi build 时生成的,会在 umi build 执行完自动删除。
测试文件,umi test 会查找全部的 .(test|e2e).(j|t)s 文件跑测试。
在入口文件最前面被自动引入,能够考虑在此加入 polyfill。
这个文件不走 css modules,自动被引入,能够写一些全局样式,或者作一些样式覆盖。
umi 的配置文件,二选一。
环境变量,好比:
CLEAR_CONSOLE=none BROWSER=none
主要注重page目录就好了,其余的在你入门学习过程当中可能都用不到。
进入src目录,执行命令
umi g page users
这样在pages目录下会生成新的users页面,浏览器访问http://localhost:8000/users:
除了生成页面,还有别的命令
umi g 是 umi generate 的别名,可用于快速生成 component、page、layout 等,而且可在插件里被扩展,好比 umi-plugin-dva 里扩展了 dva:model,而后就能够经过 umi g dva:model foo 快速 dva 的 model。