一、安装umi
Umi是蚂蚁金服出品的一款基于react的企业级前端应用框架。使用umi前,需要确保已安装node.js和npm,如果还未安装,可以寻找相应的教程进行安装。
可以使用npm或yarn进行umi安装,这里我们以npm为例。命令如下:
npm install umi -g
安装完毕后可以输入下面命令查看版本信息,检查是否安装成功。
umi -v
二、创建一个umi项目
在安装成功后,可以使用以下命令创建一个umi项目。
umi create app
等待项目初始化完成后,进入项目根目录,执行以下命令启动项目。
npm run dev
如果在启动过程中出现了提示错误信息,例如端口号被占用等问题,可以尝试修改相应的配置文件进行解决,一般来说配置文件在config目录下。
三、安装umi插件
umi提供了许多插件,可以帮忙更快捷更有效的开发项目。一般需要根据需要选择对应的插件进行安装。这里我们以安装dva为例(dva是基于redux、redux-saga和react-router库的一套轻量级框架)。
使用以下命令进行dva插件的安装。
umi plugin add dva
安装完毕后,在项目根目录下src目录下的models目录中新建一个demo.js文件,内容如下:
export default {
namespace: 'demo',
state: {
text: 'Hello Umi',
},
reducers: {
changeText(state, action) {
return {
...state,
text: action.payload,
};
},
},
};
在src目录下的pages目录中新建一个demo.js文件,内容如下:
import React from 'react';
import { connect } from 'dva';
function Demo({ dispatch, demo }) {
const { text } = demo;
function handleChangeText() {
dispatch({
type: 'demo/changeText',
payload: 'Hello Umi Dva',
});
}
return (
{text}
);
}
export default connect(({ demo }) => ({ demo }))(Demo);
新建完毕后,打开路由文件src目录下的routes.js,添加路由配置。
import Demo from './pages/demo';
export default () => [
{ path: '/', component: Demo },
];
然后运行npm run dev命令,即可在浏览器上看到效果。
四、umi配置文件
在umi项目中使用的配置文件一般存放在config目录下。我们可以通过修改配置文件来对项目进行定制和修改。下面列举了一些umi配置项的说明。
- extraBabelPlugins: 自定义的babel插件。
- define: 定义UMI_ENV,可以使用在项目中识别当前环境:development,test,production。
- devtool: 定义开发环境的sourceMap配置。
- alias: 别名配置。
- publicPath: 静态资源 CDN 路径配置。
在config目录下的文件都是以js文件形式存在的,我们可以修改或添加对应的配置项。
export default {
treeShaking: true,
targets: {
ie: 9,
},
devtool: 'sourcemap',
extraBabelPlugins: [
[
'import',
{
libraryName: 'antd',
libraryDirectory: 'es',
style: true,
},
],
],
};
五、umi插件库
umi提供了许多插件库,相较于自己写插件,使用插件库更加方便快捷。下面列举了几个常用的插件库。
- umi-plugin-react: 用于配置react项目,例如Antd主题、dva数据流等。
- umi-plugin-antd-style: 用于自定义Antd主题。
- umi-plugin-pwa: 用于开发支持离线应用的 Progressive Web App 应用。
- umi-plugin-dll: 用于打包 dll 文件,增加构建速度。
- umi-plugin-mobx: 用于集成mobx状态管理库。
使用插件库非常简单,只需要在config目录下的文件中进行配置即可(各个插件库的使用方法可在官方文档中查看)。
export default {
plugins: ['umi-plugin-react', 'umi-plugin-antd-style'],
};
六、umi路由配置
umi的路由配置是基于约定,即文件路径和文件名的约定。在一个pages目录下的js文件会被解析为一个路由。
.
└── pages
├── index.js
├── users
│ ├── index.js
│ ├── $id.js
├── ...
上面的结构中,pages/index.js文件对应路由路径为’/’;pages/users/index.js文件对应路由路径为’/users’;pages/users/$id.js文件对应路由路径为’/users/:id’。
umi还提供了一些辅助路由配置,例如access配置。
export default [
{
path: '/',
component: '../layouts/BasicLayout',
routes: [
{ path: '/', redirect: '/home' },
{
path: '/home',
component: './Home',
},
{
path: '/users',
component: './UserList',
access: 'hasRole',
},
{
path: '/about',
component: './About',
},
],
},
];
access配置可以用于根据不同的权限控制路由的访问。例如在UserList组件的JS文件中加入以下内容。
export default withRouter(connect(({ user }) => ({
hasRole: user.hasRole,
}))(UserList));
UserList.access = 'hasRole';
UserList.wrappers = [
withUndefinedAccess(UserList),
];
这个配置可以根据用户权限控制路由的访问。
七、umi约定式文件
umi支持以约定式文件扩展功能,例如约定式路由、约定式数据、约定式Mock等。
- 约定式路由: 文件路径即路由配置。
- 约定式数据: 文件路径即数据模型。
- 约定式Mock: 文件路径即API接口,使用mockjs模拟数据。
这样的约定式文件使得开发过程变得更加方便和快捷。umi的约定式路由需要配置,而不是。
约定式数据模型和约定式Mock需要在model.js文件中进行配置。
export default {
namespace: 'list',
state: [],
reducers: {
add(state, { payload: item }) {
return [...state, item];
},
},
effects: {
*assign({ payload: attribute }, { put, select }) {
const list = yield select(state => state.list);
yield put({
type: 'add',
payload: { name: 'item', ...attribute },
});
},
},
};
以上是一个简单的数据模型的例子。
八、总结
本文对umi的安装、创建项目、安装插件、配置文件、插件库、路由配置、约定式文件等进行了详细的阐述,希望对umi初学者有所帮助。

