每次给项目加新模块,第一件事是不是捏着鼻子去改那个几百行的 composer.json?如果是,那你肯定也经历过代码合并时满眼爆红的绝望。今天教你一招,十分钟搞定「即插即用」,让你的项目骨架瞬间高级起来。
被「硬编码」绑架的架构痛点
说真的,我们最初重构 Weiran 框架时,就被这个毛病恶心坏了。 所有的业务包、功能扩展全像大杂烩一样,生硬地塞在根目录的配置里。
看看以前这让人窒息的片段,你是不是觉得特别眼熟:
json
// 以前臃肿的 composer.json(纯纯反面教材)
"autoload": {
"psr-4": {
"Weiran\Extension\Alipay\": "weiran/ext-alipay/src",
"Weiran\Core\": "weiran/core/src",
// ... 无穷无尽且看着就头疼的硬编码路径
},
// 连一个破辅助函数都要在这里排队挂号
"files": [
"weiran/framework/src/Support/functions.php"
]
}
这种「中心化硬编码」简直反人类。 对比一下业界优秀的模块化设计,人家讲究的是「基于约定的动态发现」。 代码扔进去就能跑,凭什么我们要全靠手写?
破局:开启原生模块化魔法
想实现真正的子模块代码分离,根本不需要去找复杂的第三方轮子。 其实 Composer 早就准备好了一个神级却常被忽视的原生功能------Path Repositories。
整个重构改造,我们只干了最核心的三件事:
- 痛下杀手 :把那堆毫无美感的
psr-4和数组全部删干净。 - 引入通配符:用几行本地路径匹配规则完成替代。
- 完全放权 :强迫每个子模块去维护自己的微型
composer.json。
改造后的主配置变成了这样,简直引发了极度舒适:
json
// 爽快瘦身后的 composer.json(绝对的教科书级别)
{
// 1. 霸道总裁式宣告:包都在本地,去这里找!
"repositories": [
{
"type": "path",
"url": "weiran/*"
}
],
// 2. 像引用第三方大牛扩展一样优雅地 require
"require": {
"weiran/core": "*@dev",
"weiran/system": "*@dev"
}
// 就这么简单!再也不用写发臭的 psr-4 映射了!
}
配置保存的瞬间,Composer 就像个极其懂事的老管家,自动把子目录的映射打理得井井有条。 根项目彻底蜕变成了一个清白无暇的 Laravel 「微内核骨架」。
踩坑现场:被旧时代老古董狙击
当然了,谁的代码重构能一次过呢? 满怀激动敲下更新命令时,大红色的报错直接砸在脸上。
bash
# 闭眼祈祷,激动敲下回车
$ composer update "weiran/*"
# 惨遭历史遗迹的背刺
Problem 1
- Root composer.json requires weiran/ext-alipay *@dev -> satisfiable by weiran/ext-alipay[1.0.x-dev].
- weiran/ext-alipay 1.0.x-dev requires ext-mcrypt * -> it is missing from your system.
没想到本地包扫描这么严谨,Composer 顺藤摸瓜查出了底层技术债。 在历史遗留的支付宝扩展里,竟然还死死连着早被抛弃的 ext-mcrypt。
但这本身就是重构最爽的地方! 平时躲在单体架构阴暗角落里的债,全被扯到了阳光下。 顺手清理掉这波遗留垃圾,感觉项目的经脉都一下子被打通了。
写在最后
高级的架构设计,其实就是把冗长繁杂的配置藏起来,让团队只管开足马力写业务。 但凡能让机器按规则算出来的东西,就坚决不要让人手动敲。
现在,打开你的 IDE 检查一下项目。 里面还藏着这种等着被你「革命」的祖传硬编码吗?这周末打算干掉几行垃圾配置?去评论区里告诉我,咱们一起吐槽!