关于antd pro4中对同一项目根据不同配置文件/路由进行分别打包的思考

341 阅读3分钟

前言

项目开发之前没做好项目规划,或者因为一些历史遗留问题,导致本该分为两个项目的功能在一个框架下(更准确的说是一套代码中开发)。这样路由配置繁杂,依赖包引入过多,不论打包还是运行开始的时间都非常的长。在没有时间去重新创建一个项目再做代码迁移的情况下,是否能通过更改配置项来优化项目的启动和打包呢?

先说结论:

【对配置项(除路由)】新建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:anpm run start启动后,通过不同启动方式可以看出配置项修改成功: npm run start:a

image.png

npm run start

image.png

但是不论是使用哪个配置项启动,访问的项目页面中都缺少了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这个配置文件,

image.png

config.ts中更新导入,

import routes from './routes1';

成功 :)

尝试优化启动

每次要去项目配置中修改导入很麻烦,能不能直接在启动方式上区别开呢?

结合【1】【3】分别使用两套配置config.a.ts + routes1config.ts + routes

但是启动后依旧根据config.ts配置项来。

build测试

删除.umi分别用不同的routes运行yarn build

image.png

可以看出页面的不同

失败:(

总结

在个人项目中还是推荐不同项目分开来,公司项目大概身不由己~

这些只是我个人的尝试,可能有操作不当,请各位批评指正。

如果有更好的方式能完成,欢迎各位前来讨论(尤其是能不能通过start项目的方法来完成启动)

感谢!