umi 是一个企业级 react 应用框架,也是蚂蚁金服的底层前端框架

《蚂蚁金服的前端框架和工程化实践》

一、安装脚手架

在创建项目之前,需要保证有 node 8.10 以上的环境

可以使用官方脚手架 create-umi 快速创建项目

首先创建一个新目录

mkdir myapp && cd myapp

然后直接创建项目

yarn create umi
// 或
npm create umi

如果提示 create-umi 命令不存在,可以先执行  yarn global bin ,然后把 global bin 的路径添加到 PATH 环境变量里

另外也可以选择手动安装 create-umi 并执行

$ npm install create-umi -g
$ create-umi

二、按需创建项目

选择 app 创建一个 umi 应用

选择是否使用 typeScript,默认不使用

然后使用空格键选择需要的功能,功能介绍详见 plugin/umi-plugin-react

这里的 antd 和 dva 可以不用选,只要创建项目后配置相应的插件,就能在项目中内置 antd、antd-mobile 和 dva

然后就会生成如下的项目

现在可以使用 yarn start 命令启动项目了,在浏览器中访问 http://localhost:8000 可以查看预置页面

三、配置插件

根目录下的 .umirc.js 是整个应用的配置文件,上面提到的插件也可以在这里配置

配置项可以写在 .umirc.js 文件中,也可以写在 config/config.js 文件中,二者只有一个生效 

完整的配置项可以参考文档,这里介绍几个比较实用的配置项:

1. proxy

const HOST_URL = '';
export default {
proxy: {
'/api': {
target: HOST_URL,
changeOrigin: true,
pathRewrite: { '/api': '' },
},
},
}

2. theme

全局配置 less 变量(umi 项目默认使用 less)

export default {
theme: {
'primary-color': '#3385ff',
'font-size-base': '14px',
},
}

然后在 less 文件顶部引入

@import '~antd/lib/style/themes/default.less';

就能直接使用配置的 theme 变量了

3. routes

umi 会基于约定的 pages 目录自动生成路由

如果更倾向于使用配置路由,可以在配置文件中单独配置 routes

export default {
routes: [
{ path: '/', component: './a' },
{ path: '/list', component: './b', Routes: ['./routes/PrivateRoute.js'] },
{ path: '/users', component: './users/_layout',
routes: [
{ path: '/users/detail', component: './users/detail' },
{ path: '/users/:id', component: './users/id' }
]
},
],
};

配置项中的 component 路径是从 src/pages 目录开始解析的

⚠️注意:routes 配置项存在时则不会对 src/pages 目录做约定式的解析,即约定式路由无法生效

4.alias

可以配置 webpack 的 resolve.alias 属性

alias: {
'@': require('path').resolve(__dirname, './src'),
'@components': require('path').resolve(__dirname, './src/components'),
},

配置之后在 import 的时候可以使用快捷路径

另外根目录下有一个 webpack.config.js,这里也有配置 alias,但这里的 alias 不会在项目中生效

5.devServer

官方文档上说可以配置 devServer

但实际上直接配置 devServer 是无效的

而图上提到的 https、port 等需要使用 .env 文件来配置环境变量

BROWSER=none
ESLINT=
PORT=9000 // 自定义本地服务端口

这里定义的系统环境变量在整个 umi-build-dev 的生命周期里都可以被使用

四、约定目录

umi 对于项目中的目录有严格的约定,路由、model 都是基于目录结构实现

.
├── 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
├── app.js // 运行时配置文件
├── .umirc.js // umi 配置,同 config/config.js,二选一
├── .env // 环境变量
└── package.json

以上的目录除了 pages 下面的自定义页面文件以外,都不可以重命名

如果需要给整个项目添加一个静态 HTML 模版,可以新建一个 src/pages/document.ejs 文件

但这个 document.ejs 文件必须包含  <div id="root"></div>

五、路由与页面跳转

如果采用约定式路由,pages 目录下的页面需要严格遵守相关规范

具有 $ 前缀的页面会被识别为动态路由

pages/users/$id.js
-> path: '/users/:id'

同时具备 $ 前缀和后缀的页面会被识别为可选的动态路由

pages/users/$id$.js
-> path: '/users/:id?'

当目录下存在 _layout.js 文件时,会以 _layout.js 作为基础页面生成嵌套路由

+ pages/
+ users/
- _layout.js
- $id.js
- index.js

以上的目录结构会生成:

[
{ path: '/users', component: './pages/users/_layout.js',
routes: [
{ path: '/users/', component: './pages/users/index.js' },
{ path: '/users/:id', component: './pages/users/$id.js' },
],
},
]

在页面中可以通过 umi/router 提供的 API 跳转页面

import router from 'umi/router';

function goToList() {
router.push('/list');
}

或者使用 umi/link 作为组件跳转

import Link from 'umi/link';

export default () => (
<Link to="/list">Go to list page</Link>
);

Umi 小白纪实(一)—— 创建项目&常用配置的更多相关文章

  1. Umi 小白纪实(三)—— 震惊!路由竟然如此强大!

    在<Umi 小白纪实(一)>中有提到过简单的路由配置和使用,但这只是冰山一角 借用一句广告词,Umi 路由的能量,超乎你的想象 一.基本用法 Umi 的路由根结点是全局 layout  s ...

  2. django->基本操作和新建项目常用配置

    一.安装django pip install django==2.1.5 -U #安装django/升级最新版本 二.创建.启动django项目 django-admin startproject m ...

  3. Android项目实战之高仿网易云音乐创建项目和配置

    这一节我们来讲解创建项目:说道大家可能就会说了,创建项目还有谁不会啊,还需要讲吗,别急听我慢慢到来,肯定有你不知道的. 使用项目Android Studio创建项目我们这里就不讲解了,主要是讲解如何配 ...

  4. 191112Django项目常用配置

    创建项目 >django-admin startproject project01 创建应用 >python manage.py startapp app01 settings.py 配置 ...

  5. VSCode 创建项目常用命令

    对 http://www.bkjia.com/Asp_Netjc/1233276.html 的补充 1. 创建HelloWorld.Solutions目录并且在此目录中创建sln解决方案 例:dotn ...

  6. Winform项目常用配置方法

    在我们做项目的时候经常遇到需要动态配置系统的情况,比如说10台电脑装了同一个软件,需要识别唯一码,这时候我们会用到配置方法. 具体方法如下: 1) Config文件 里面增加你需要的变量,具体用法如下 ...

  7. Umi 小白纪实(二)—— model 的注册与使用

    Umi 通常会搭配 Dva 使用,用于管理页面状态和逻辑 一.注册 model 首先需要在 .umirc.js 中启用 dva 插件 export default { plugins: [ ['umi ...

  8. spring-boot web项目常用配置

    一.对用户输入query参数过滤空字符串 使用 WebBindingInitializer 来对string类型参数进行过滤,但是这种方式只能处理query参数不能处理body参数 代码例子: /** ...

  9. electron创建窗口常用配置参数

    { "width": 800,//指定窗口的宽度,单位: 像素值. 默认是 800 "height":600,//指定窗口的高度,单位: 像素值,. 默认是 6 ...

随机推荐

  1. IDEA | 更改idea打开新项目默认配置

    背景 使用过idea的童鞋应该都发现,用idea打开一个新项目,总是需要重新配置一遍,它会使用系统默认配置,例如maven.JDK等设置. 解决方案 IDEA其实有个设置是可以更改新项目的默认配置,大 ...

  2. JVM 面试题汇总

    JVM 面试题汇总 1.什么是 JVM?它有什么作用? 答:JVM 是 Java Virtual Machine(Java 虚拟机)的缩写,顾名思义它是一个虚拟计算机,也是 Java 程序能够实现跨平 ...

  3. html块级元素的水平垂、直居中的方式

    说明 对于初学者来说,块级元素的剧中,也是一大难题,我学习的时候,也是一脸懵逼,每次遇到都要百度,但是写的多了也自然记住一些常用的剧中方式,但是还是很模糊,今天就来好好总结一些. 布局 布局即为简单, ...

  4. 安装MySQL出现[Errno 256] No more mirrors to try

    今天安装数据库时出现错误提示,如下图: 解决办法如下: yum clean all #清除仓库缓存 yum makecache #将服务器包信息缓存到本地 然后再执行数据库安装指令 yum insta ...

  5. Dubbo(三):深入理解Dubbo源码之如何将服务发布到注册中心

    一.前言 前面有说到Dubbo的服务发现机制,也就是SPI,那既然Dubbo内部实现了更加强大的服务发现机制,现在我们就来一起看看Dubbo在发现服务后需要做什么才能将服务注册到注册中心中. 二.Du ...

  6. 理解POP、OOP、AOP编程

    一.面向过程编程:(POP:Procedure Oriented Programming) 面向过程编程是以功能为中心来进行思考和组织的一种编程方法,它强调的是功能(即系统的数据被加工和处理的过程), ...

  7. HDU_4570_区间dp

    http://acm.hdu.edu.cn/showproblem.php?pid=4570 连题目都看不懂,直接找了题解,copy了过来= =. 一个长度为n的数列,将其分成若干段(每一段的长度要& ...

  8. JCL、SLF4J、Log4J、Log4J2、LogBack和JUL之间的关系,你搞清楚了吗?

    写在前面 日志组件是我们平时开发过程中必然会用到的组件.在系统中正确的打印日志至少有下面的这些好处: 调试:在程序的开发过程中,必然需要我们不断的调试以达到程序能正确执行的状态 .记录日志可以让开发人 ...

  9. 11-HTTP请求协议

    今日知识 1. http 2. Tomcat使用 3. 知识总结 HTTP 1. 概念:Hyper Text Transfer Protocol * 传输协议:定义了,客户端和服务器通信时,发送的数据 ...

  10. Solr系列4-SolrJ开发应用

    1: Solr导入 1.1导入POM # Base Code Java org.apache.solr solr-solrj 8.4.0 # spring boot org.springframewo ...