基本API
    1.1** **dynamic
    动态加载组件。
    常见使用场景:组件体积太大,不适合直接计入 bundle 中,以免影响首屏加载速度。
    为什么使用 dynamic:封装了使用一个异步组件需要做的状态维护工作,开发者可以更专注于
    自己的业务组件开发,而不必关心 code spliting、async module loading 等等技术细节。
    1.2** **history
    可用于获取当前路由信息。(length,action,location)
    可用于路由跳转,(history.push,history.goBack())
    也可用于路由监听 (history.listen((location, action)=》{}))
    1.3** **plugin
    主要在插件利用,项目代码中一般用不到。
    运行时插件接口,是 Umi 内置的跑在浏览器里的一套插件体系。
    1.4** **ApplyPluginsType
    主要在插件利用,项目代码中一般用不到。
    运行时插件执行类型,enum 类型,包含三个属性:

    • compose,用于合并执行多个函数,函数可决定前序函数的执行时机
    • modify,用于修改值
    • event,用于执行事件,前面没有依赖关系

    1.5** **Link
    链接组件
    1.6** **NavLink
    特殊版本的 <Link /> 。当指定路由(to=指定路由)命中时,可以附着特定样式
    1.7** **Prompt
    提供一个用户离开页面时的提示选择
    1.8** **withRouter
    高阶组件,可以通过 withRouter 获取到 historylocationmatch 对象
    1.9** **useHistory
    hooks,获取 history 对象
    2.0** **useLocation
    hooks,获取 location 对象
    2.1** **useParams
    hooks,获取 params 对象。 params 对象为动态路由(例如:/users/:id)里的参数键值对。
    2.2** **useRouteMatch
    获取当前路由的匹配信息。
    2.2 **node 侧接口
    通过 package.json 的 main 字段露出,且不存在于 modules 字段里。
    2.2 **Service
    Umi 内核的 Service 方法,用于测试,或调用 Umi 底层命令。
    2.3 **utils
    utils 方法,给插件使用,和插件里的 api.utils 是同一个底层库。
    2.4 **defineConfig
    用于校验和提示用户配置类型,详见配置#TypeScript 提示