Umi 小白纪实(一)—— 建立项目&经常使用配置

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

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

 

1、安装脚手架前端

在建立项目以前,须要保证有 node 8.10 以上的环境node

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

首先建立一个新目录webpack

mkdir myapp && cd myapp

而后直接建立项目git

yarn create umi 
// 或
npm create umi

若是提示 create-umi 命令不存在,能够先执行  yarn global bin ,而后把 global bin 的路径添加到 PATH 环境变量里github

 

另外也能够选择手动安装 create-umi 并执行web

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

 

 

2、按需建立项目express

选择 app 建立一个 umi 应用

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

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

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

而后就会生成以下的项目

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

 

 

3、配置插件

根目录下的 .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=1 PORT=9000 // 自定义本地服务端口

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

 

 

4、约定目录

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> 

 

5、路由与页面跳转

若是采用约定式路由,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>
);
相关文章
相关标签/搜索