点击上方“开发者技术前线”,选择“星标”

18:30 在看 真爱

作者:Tamic  |  编辑: 可可

阿里之前开源:阿里闲鱼开源 Flutter 应用框架 Fish Redux! 今天介绍的是前端React 框架- UmiJS。

介绍

umi官方宣称是一个可插拔的企业级 react 应用框架。umi 以路由为基础的,支持类 next.js 的约定式路由,以及各种进阶的路由功能,并以此进行功能扩展,比如支持路由级的按需加载。然后配以完善的插件体系,覆盖从源码到构建产物的每个生命周期,支持各种功能扩展和业务需求,目前内外部加起来已有 50+ 的插件。

umi 是蚂蚁金服的底层前端框架,已直接或间接地服务了 600+ 应用,包括 支持java、node、H5 无线、离线(Hybrid)应用、纯前端 assets 应用、CMS 应用等。他已经很好地服务了我们的内部用户,同时希望他也能服务好外部用户。

特性

  • ? 开箱即用,内置 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 等等

架构图

从源码到上线的生命周期管理

市面上的框架基本都是从源码到构建产物,很少会考虑到各种发布流程,而 umi 则多走了这一步。

下图是 umi 从源码到上线的一个流程。

umi 首先会加载用户的配置和插件,然后基于配置或者目录,生成一份路由配置,再基于此路由配置,把 JS/CSS 源码和 HTML 完整地串联起来。用户配置的参数和插件会影响流程里的每个环节。

他和 dva、roadhog 是什么关系?

简单来说,

  • roadhog 是基于 webpack 的封装工具,目的是简化 webpack 的配置

  • umi 可以简单地理解为 roadhog + 路由,思路类似 next.js/nuxt.js,辅以一套插件机制,目的是通过框架的方式简化 React 开发

  • dva 目前是纯粹的数据流,和 umi 以及 roadhog 之间并没有相互的依赖关系,可以分开使用也可以一起使用,个人觉得 umi + dva 是比较搭的

为什么不是...?

next.js

next.js 的功能相对比较简单,比如他的路由配置并不支持一些高级的用法,比如布局、嵌套路由、权限路由等等,而这些在企业级的应用中是很常见的。相比 next.js,umi 在约定式路由的功能层面会更像 nuxt.js 一些。

roadhog

roadhog 是比较纯粹的 webpack 封装工具,作为一个工具,他能做的就比较有限(限于 webpack 层)。而 umi 则等于 roadhog + 路由 + HTML 生成 + 完善的插件机制,所以能在提升开发者效率方面发挥出更大的价值。

安装

入门非常简单

e

# 新建页面

$ umi generate page index

# 本地开发

$ umi dev

# 构建上线

$ umi build

环境准备

首先得有 node,并确保 node 版本是 8.10 或以上。(mac 下推荐使用 nvm 来管理 node 版本)

$ node -v

8.1x

推荐使用 yarn 管理 npm 依赖,并使用国内源(阿里用户使用内网源)。

# 国内源

$ npm i yarn tyarn -g

# 后面文档里的 yarn 换成 tyarn

$ tyarn -v

# 阿里内网源

$ tnpm i yarn @ali/yarn -g

# 后面文档里的 yarn 换成 ayarn

$ ayarn -v

然后全局安装 umi,并确保版本是 2.0.0 或以上。

$ yarn global add umi

$ umi -v

2.0.0

脚手架

先找个地方建个空目录。

$ mkdir myapp && cd myapp

然后通过 umi g 创建一些页面,

$ umi g page index

$ umi g page users

umi g 是 umi generate 的别名,可用于快速生成 component、page、layout 等,并且可在插件里被扩展,比如 umi-plugin-dva 里扩展了 dva:model,然后就可以通过 umi g dva:model foo 快速 dva 的 model。

然后通过 tree 查看下目录,(windows 用户可跳过此步)

$ tree

.

└── pages

├── index.css

├── index.js

├── users.css

└── users.js

这里的 pages 目录是页面所在的目录,umi 里约定默认情况下 pages 下所有的 js 文件即路由,如果有 next.js 或 nuxt.js 的使用经验,应该会有点眼熟吧。

然后启动本地服务器,

$ umi dev

约定式路由

启动 umi dev 后,大家会发现 pages 下多了个 .umi 的目录。这是啥?这是 umi 的临时目录,可以在这里做一些验证,但请不要直接在这里修改代码,umi 重启或者 pages 下的文件修改都会重新生成这个文件夹下的文件。

然后我们在 index 和 users 直接加一些路由跳转逻辑。

先修改 pages/index.js,

+ import Link from 'umi/link';

import styles from './index.css';

export default function() {

return (

Page index

+ <Link to="/users">go to /usersLink>

);

}

再修改 pages/users.js,

+ import router from 'umi/router';

import styles from './index.css';

export default function() {

return (

Page index

+ { router.goBack(); }}>go back

);

}

然后浏览器验证,应该已经可以在 index 和 users 两个页面之间通过路由跳转了。

部署发布

构建

执行 umi build,

$ umi build

DONE Compiled successfully in 1729ms

File sizes after gzip:

68.04 KB dist/umi.js

83 B dist/umi.css

构建产物默认生成到 ./dist 下,然后通过 tree 命令查看,(windows 用户可忽略此步)

$ tree ./dist

./dist

├── index.html

├── umi.css

└── umi.js

本地验证

发布之前,可以通过 serve 做本地验证,

$ yarn global add serve

$ serve ./dist

Serving!

- Local: http://localhost:5000

- On Your Network: http://{Your IP}:5000

Copied local address to clipboard!

访问 http://localhost:5000,正常情况下应该是和 umi dev 一致的。

部署

本地验证完,就可以部署了,这里通过 now 来做演示。

$ yarn global add now

$ now ./dist

> Deploying /private/tmp/sorrycc-1KVCmK/dist under chencheng

> Synced 3 files (301.93KB) [2s]

> https://dist-jtckzjjatx.now.sh [in clipboard] [1s]

> Deployment complete!

然后打开相应的地址就能访问到线上的地址了。

测试与配置检查

测试

umi 内置了基于 jest 的测试工具 umi-test :

$ umi test

Options:

--coverage indicates that test coverage information should be collected and reported in the output

配置检查

使用 umi inspect 列出配置项的内容用以检查:

$ umi inspect

Options:

--mode specify env mode (development or production, default is development)

--rule inspect a specific module rule

--plugin inspect a specific plugin

--rules list all module rule names

--plugins list all plugin names

--verbose show full function definitions in outpu

官方文档

中文文档:https://umijs.org/zh/

Github:https://github.com/umijs/umi

END

开发者技术前线 ,汇集技术前线快讯和关注行业趋势,大厂干货,是开发者经历和成长的优秀指南。

历史阅读

互联网江湖,从此再无 BAT

当年的三本学渣,最后 6 家大厂还不是随便进了

学不动了 ,京东跨端移动开发平台 Ares 发布!

喜欢就点个好看吧

react router官方文档_阿里开源可插拔 React 跨端框架 UmiJS相关推荐

  1. tensorflow官方文档_开源分享:最好的TensorFlow入门教程

    如果一门技术的学习曲线过于陡峭,那么我们在入门时的场景往往是,一鼓作气,没入门,再而衰,三而竭.演绎一出从入门到放弃的败走麦城. 今天发现一个入门TensorFlow的宝藏,迫不及待的分享给大家.这个 ...

  2. javascript官方文档_基于Javascript编写的开源Markdown和HTML相互转换器——showdown

    介绍 showdown是一个基于Javascript编写的开源Markdown和HTML相互转换器,showdown可以用在客户端(浏览器)或者服务端(nodejs).shodown还支持原始规范中未 ...

  3. dubbo官方文档_狂神说SpringBoot17:Dubbo和Zookeeper集成

    狂神说SpringBoot系列连载课程,通俗易懂,基于SpringBoot2.2.5版本,欢迎各位狂粉转发关注学习.未经作者授权,禁止转载 分布式理论 什么是分布式系统? 在<分布式系统原理与范 ...

  4. pyecharts官方文档_中国疫情地图pyecharts

    共助医患渡江南, 同为华人望平安. 战有常山似鼠窜, 疫有谣传使心寒. 这次咱们不说疫情,咱们来说说怎么画一个中国疫情图. 这里用到了pyecharts,这个库里包含了非常多的图 https://py ...

  5. dubbo官方文档_不可忽视的Dubbo线程池

    问题描述 线上突然出现Dubbo超时调用,时间刚好为Consumer端设置的超时时间. 有好几个不同的接口都报超时了 第1次调用超时,第2次(或第3次)重试调用非常快(正常水平) Dubbo调用超时的 ...

  6. spark官方文档_这些未在 Spark SQL 文档中说明的优化措施,你知道吗?

    本文来自上周(2020-11-17至2020-11-19)举办的 Data + AI Summit 2020 (原 Spark+AI Summit),主题为<Spark SQL Beyond O ...

  7. C#_08_官方文档_语言介绍

    C# 官方文档_C#语言介绍篇章 https://docs.microsoft.com/zh-cn/dotnet/csharp/tour-of-csharp/ C# 语言介绍 C#(读作"S ...

  8. pandas官方文档_电影数据轻松学习 Pandas

    还记得刚开始接触 Pandas 的时候,没有找到比较系统的教程,印象最深的是看过别人翻译的官方教程< 10 Minutes to Pandas >,遇到不懂的地方就去官网查查 API,后来 ...

  9. springcloud官方文档_通俗易懂!Spring Cloud简介:官方文档翻译版

    什么是微服务? "微服务架构是一种架构模式,它提倡将单一应用程序划分成一组小的服务,服务之间相互协调.互相配合,为用户提供最终价值.每个服务运行在其独立的进程中,服务和服务之间采用轻量级的通 ...

最新文章

  1. sar偏移量追踪技术_论文推荐 | 吴文豪:基于几何配准的多模式SAR影像配准及其误差分析...
  2. SAP中的KANBAN
  3. Xamarin XAML语言教程基本视图ContentViewg构架范围框架
  4. 用Javascript隐藏超级链接的真实地址
  5. python filename 以txt截尾_What?PPT里也能运行Python?
  6. 深度探索推荐系统算法在工业界如何应用
  7. wpf 去除按钮点击时会画一个点线的矩形
  8. 保存时间 默认_一些不起眼但又非常的实用的PPT制作技巧,大大节省PPT制作时间...
  9. 统计c语言中英文字幕,C语言日记——递归
  10. SQL SERVER拼接字符串(字符串中有变量)
  11. 微信小游戏开发-飞机大战【源码赠送】
  12. java拦截器和过滤器的区别_拦截器和过滤器的区别
  13. 电子海图与雷达图像的融合显示
  14. 计算机显示不出桌面的文件夹,win10电脑保存文件路径不显示桌面怎么办?
  15. 毕马威计算机测试题,2021年KPMG毕马威笔试含详解.doc
  16. 为什么项目经理都需要PMP认证?
  17. C10K 问题引发的技术变革
  18. Android中TextView文字设置不同的颜色
  19. xp 自带超级终端的添加
  20. 干货 |VALSE 2019总结 --PPT 打包下载

热门文章

  1. Python切分文本(将文本文档切分为词列表)
  2. 轻量级分布式任务调度平台 XXL-JOB
  3. Boost学习之正则表达式--regex
  4. 如何阅读一本书~阅读的层次
  5. android applybatch,android – 使用applyBatch插入成千上万的联系人条目很慢
  6. 排除jar_Gradle排除依赖关系
  7. C 语言笔记: 链表节点实现技巧--struct的妙用
  8. linux---基础03
  9. Xcode中StaticLibrary和Framework的共同点和区别
  10. android menuitem 字体颜色,安卓更改Menu的字体颜色(使用actionLayout,适用于多个fragment)...