运行时配置 
插件的配置分为编译时的和运行时的,编译时的配置是在 node 端执行,运行时的配置是在浏览器端执行。
运行时的配置的值有很多类型,可以为数组、对象、函数等等,而且配置只有注册了才能使用。
配置方式 
约定在 src/app.ts|tsx|js 文件中使用插件运行时的配置,这些配置需通过 export 导出,插件中才能读取到,来控制 vue 和 vue-router 相关的配置。
可以在这里写函数、tsx、import 一些依赖来完成某些配置,但是只能 import 浏览器端依赖,注意不能引入 node 依赖,否则会陷入死循环,造成异常情况发生。同时要切记所 import 依赖只能跟配置相关,如果要引起全局依赖,请在 src/global.ts 文件中引入。
TypeScript 提示 
如果你想在写配置时也有提示,可以通过 WinJS 的 defineApp 方法定义配置。
import { defineApp } from 'win';
export default defineApp({
  layout: () => {
    return {
      title: 'win',
    };
  },
});
// or
import { RuntimeConfig } from 'winjs';
export const layout: RuntimeConfig['layout'] = () => {
  return {
    title: 'win',
  };
};配置项 
以下配置项按字母排序。
modifyClientRenderOpts(opts) 
修改 clientRender 参数。
- routes,路由配置信息
- rootElement, 渲染的根节点,默认是 #root,可通过配置 mountElementId 修改。
- callback,回调函数
比如在微前端里动态修改渲染根节点:
let isSubApp = false;
export function modifyClientRenderOpts(opts) {
  return {
    ...opts,
    rootElement: isSubApp ? 'sub-root' : opts.rootElement,    
  };
}onMounted({app, router}) 
Vue app mount 成功回调, 这里可以拿到 app 的实例及 router 的实例, 可以进行全局组件注册, 路由拦截器等。
export function onMounted({ app, router }: any) {
  console.log('onMounted', app, router);
  app.provide('win-hello', {
    h: 'hello',
    w: 'word',
  });
  
  // 路由拦截器
  router.beforeEach((to, from, next) => {
    next();
  })
}patchRoutes({ routes }) 
export function patchRoutes({ routes, routeComponents }) {
  console.log('patchRoutes', routes, routeComponents);
}- routes: 打平的路由列表。
- routeComponents: 路由对应的组件映射。
render(oldRender: Function) 
覆写 render。
比如用于渲染之前做权限校验,
export function render(oldRender) {
  fetch('/api/auth').then(auth => {
    if (auth.isLogin) { oldRender() }
    else {
      location.href = '/login';
      oldRender()
    }
  });
}router 
配置路由配置
// src/app.tsx
export const router: RouterConfig = {
  // @ts-ignore
  scrollBehavior(to, from) {
    console.log('scrollBehavior', to, from);
  },
};request 
如果你使用了 import { request } from 'winjs'; 来请求数据,那么你可以通过该配置来自定义中间件、拦截器、错误处理适配等。具体参考 request 插件配置。
rootContainer(lastRootContainer, args) 
修改交给 Vue 渲染时的根组件,默认是 <router-view></router-view>。
- lastRootContainer,最上层的根组件。
- args,包含: - routes,全量路由配置
- plugin,运行时插件机制
 
比如用于在外面包一个 Provider。
import { h } from 'vue'
export function rootContainer(container) {
  return h(ThemeProvider, null, container);
}更多配置 
WinJS 允许插件注册运行时配置,如果你使用插件,肯定会在插件里找到更多运行时的配置项。
