# 运行时配置
运行时配置和配置的区别是他跑在浏览器端,基于此,我们可以在这里写函数、`import` 浏览器端依赖等等,注意不要引入 `node` 依赖。
## 配置方式
约定 `src/app.js` 为运行时配置。运行时配置的类型有三种,具体查看[applypluginstype](../reference/api/#applypluginstype)。
## 配置项
### beforeRender
beforeRender(lastOpts)
在渲染之前执行,执行`action`过程中显示 `loading` 配置的组件,执行结果作为参数 `initialState` 传给 `modifyClientRenderOpts`。
示例:
```js
// app.js
import { access } from '@fesjs/fes';
import PageLoading from '@/components/PageLoading';
import UserCenter from '@/components/UserCenter';
export function beforeRender(lastOpts) {
return {
...lastOpts,
loading: ,
action() {
const { setRole } = access;
return new Promise((resolve) => {
setTimeout(() => {
setRole('admin');
resolve({
userName: 'harrywan'
});
}, 1000);
});
}
}
};
```
### patchRoutes
patchRoutes({routes })
修改路由。
比如在最前面添加一个 /foo 路由:
```
export function patchRoutes({ routes }) {
routes.unshift({
path: '/foo',
component: require('@/extraRoutes/foo').default,
});
}
```
:::tip
直接修改 `routes`, 不需要返回
:::
### modifyClientRenderOpts
modifyClientRenderOpts(lastOpts)
修改 `clientRender` 参数。参数是一个对象:
- routes,路由配置信息
- rootElement, 渲染的根节点,默认是 `#app`,可通过配置 `mountElementId` 修改。
- initialState, 初始化数据,`beforeRender` 运行得到的数据。
比如在微前端里动态修改渲染根节点:
```js
let isSubApp = false;
export function modifyClientRenderOpts(lastOpts) {
return {
...lastOpts,
rootElement: isSubApp ? 'sub-root' : lastOpts.rootElement,
};
}
```
### rootContainer
rootContainer(LastRootContainer, args)
修改交给 Vue 渲染时的根组件,默认是 ``。
- LastRootContainer,上一个插件修改后的结果。
- args,包含:
- routes,全量路由配置
- plugin,运行时插件机制
比如在可以包一层DIV:
```js
export function rootContainer(container) {
return () => {
return (
)
}
}
```
### onAppCreated
onAppCreated({app})
创建 app 实例后触发。
比如用于安装 Vue 插件:
```js
import { createRouter } from "vue-router";
export function onAppCreated({ app }) {
const router = createRouter();
app.use(router);
}
```
### render
render(oldRender: Function)
覆写 render。
比如用于渲染之前做权限校验。
### onRouterCreated
onRouterCreated({router})
生成router时触发。
比如用于收集切换路由的记录:
```js
export function onRouterCreated({ router }) {
router.afterEach((to, from) => {
console.log(to)
});
}
```
## 更多配置项
Fes.js 允许插件注册运行时配置,如果你使用插件,肯定会在插件里找到更多运行时的配置项。