12. 冷启动提速 split-router-loader
简介
split-router-loader
实现原理主要是基于对 umi
的配置式路由文件
在 webpack 开发模式下文件 loader
阶段动态生成,以实现按需加载。
用法
- 引入
split-router-loader
代码
飞搭工程的 config/config.dev.ts
引入 split-router-loader
代码。
import { IConfig } from 'umi';
import path from "path"; // ref: https://umijs.org/config/
const config: IConfig = {
define: {
// ......
chainWebpack: (c) => {
c.module
.rule('split-router-loader')
.test(/\.tsx?$/)
.use('split-router-loader')
.loader(
path.join(__dirname,
'../scripts/loaders/split-router-loader.js'
)
)
.end();
return c;
},
};
export default config;
- 定义需要拆分的路由
修改飞搭工程的 scripts/loaders/router.js
文件,以 {key:string: values:string[]}
形式维护需要拆分的路由。
例:
const routerModeMap = {
script: [
'/hmde/a', // 路由对应的 path(仅识别第一层)
'/hmde/b',
],
process: [
'/hmde/c'
],
businessObject: [
'/hmde/d'
]
}
module.exports = {
routerModeMap,
}
- 定义 SPILT_ROUTER 变量
修改飞搭工程的 packages/你的子模块/config/config.dev.ts
文件,添加变量 process.env.SPILT_ROUTER
。
例:
const splitRouters = [
'script',
// 'process',
// 'businessObject',
];
process.env.SPILT_ROUTER = splitRouters.join(',');
以上配置代表启动 script 模块的拆分路由。
支持多个模块的拆分路由组合启动。
例:
const splitRouters = [
'script',
'process',
// 'businessObject',
];
process.env.SPILT_ROUTER = splitRouters.join(',');
以上配置代表启动 script 模块和 process 模块的拆分路由。
如果 SPILT_ROUTER 变量不存在或者为空字符串, 则全量启动子模块。
例:
const splitRouters = [
// 'script',
// 'process',
// 'businessObject',
];
process.env.SPILT_ROUTER = splitRouters.join(',');
以上配置代表完整启动子模块。
此篇维护者: