前言
项目开发之前没做好项目规划,或者因为一些历史遗留问题,导致本该分为两个项目的功能在一个框架下(更准确的说是一套代码中开发)。这样路由配置繁杂,依赖包引入过多,不论打包还是运行开始的时间都非常的长。在没有时间去重新创建一个项目再做代码迁移的情况下,是否能通过更改配置项来优化项目的启动和打包呢?
先说结论:
【对配置项(除路由)】新建config.a.ts(自命名)文件在package.json中更改
scripts:{"start:a": "cross-env UMI_ENV=a umi dev"}
【对路由】新建routes1(自命名)文件在config.ts中更改
import routes from './routes1';
以下是尝试过程:
修改package.json
在进行了一定的资料查找之后,首先尝试进行配置项的修改
以下使用ant design pro 4 + umi 3框架
//在config/config.ts中新建config.a.ts配置文件
//config.ts(原生配置文件)中没有有Tablelist路由,config.a.ts中加上
{
name: 'list.table-list',
icon: 'table',
path: '/list',
component: './TableList',
},
//对package.json里面的启动项做出更改:
"start": "cross-env UMI_ENV=dev umi dev",
"start:a": "cross-env UMI_ENV=a umi dev",
//config.a.ts使用webpack5和msfu
webpack5: {},
mfsu: {}
分别使用npm run start:a和npm run start启动后,通过不同启动方式可以看出配置项修改成功:
npm run start:a:
npm run start:
但是不论是使用哪个配置项启动,访问的项目页面中都缺少了tablelist这部分的页面。如果将config.a.ts文件中去掉但是config.ts文件中添加上,那么都会出现页面。
修改其他配置项可以实现不同配置启动,路由除外。推断路由配置会和config.ts中保持一致
修改baseLayout.e2e.js
那么如果我将config.ts改为config.b.ts,再进行尝试会怎么样呢?
发现了vscode中的一个新功能,右键可以查看
查看文件引用。
在修改名字时系统提示更新依赖项,指向了e2e/_mocks_/baseLayout.e2e.js这个文件,在观察了文件结构后,推断默认路由与该文件有关:
const { uniq } = require('lodash');
const RouterConfig = require('../../config/config.b').default.routes;
const BASE_URL = `http://localhost:${process.env.PORT || 8000}`;
修改了const RouterConfig = require('../../config/config.a.ts').default.routes后,
删除了.umi文件夹后重新下载,启动。发现默认路由配置还是和config.ts(config.b.ts)相同。
修改config.ts里面的routes
新增了routes1这个配置文件,
在config.ts中更新导入,
import routes from './routes1';
成功 :)
尝试优化启动
每次要去项目配置中修改导入很麻烦,能不能直接在启动方式上区别开呢?
结合【1】【3】分别使用两套配置config.a.ts + routes1和config.ts + routes,
但是启动后依旧根据config.ts配置项来。
build测试
删除.umi分别用不同的routes运行yarn build
可以看出页面的不同
失败:(
总结
在个人项目中还是推荐不同项目分开来,公司项目大概身不由己~
这些只是我个人的尝试,可能有操作不当,请各位批评指正。
如果有更好的方式能完成,欢迎各位前来讨论(尤其是能不能通过start项目的方法来完成启动)
感谢!