一、安装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初学者有所帮助。