从本地SVN仓库子目录加载Composer包的正确配置方案咨询
我来帮你梳理下这个问题的核心,以及正确的配置方式——我之前也碰到过类似的坑,太懂这种配置不生效的抓狂感了😅
首先得先确认你的SVN目录结构是没问题的:每个子包(core、core-analytics)都有自己的trunk目录,且trunk里放着独立的composer.json,这个结构是符合Composer要求的,问题出在依赖项目的composer.json配置细节上。
一、先修复最关键的仓库配置问题
你当前的配置只给core包加了SVN仓库条目,但依赖里还有core-analytics,而且package-path的路径也没写对——这是最常见的坑!
1. 给每个依赖的子包单独配置SVN仓库
Composer不会自动扫描SVN目录下的所有子包,必须给每个要加载的子包都单独加一条repositories配置,而且必须精确指向子包的trunk目录(因为你的composer.json在trunk里):
"repositories": [ { "type": "svn", "url": "https://svn:8443/svn/Vendor/tt", "package-path": "core/trunk" // 这里要写到trunk!之前只写core/是找不到composer.json的 }, { "type": "svn", "url": "https://svn:8443/svn/Vendor/tt", "package-path": "core-analytics/trunk" // core-analytics同理,指向它自己的trunk } ]
别嫌麻烦,每个子包都得单独配,Composer的SVN仓库类型就是这么设计的。
2. 确认包名完全匹配
再核对一遍:依赖里写的vendor/tt-core必须和core包trunk里composer.json的name字段完全一致,大小写、前缀后缀都不能错——这个看起来你是对的,但再检查一遍准没错。
二、配置后的验证步骤(必做,避免缓存坑)
配置完别直接跑composer install,先做这两步:
- 清空Composer缓存:
composer clear-cache——很多时候配置不生效就是缓存在搞鬼,清了绝对没坏处 - 执行指定包的更新:
composer update vendor/tt-core vendor/tt-core-analytics,比全量update快,也能更精准地看到子包的加载情况 - 如果还是有问题,加
-vv参数看详细日志:composer update -vv,日志里会显示Composer在SVN里查找文件的具体路径,一眼就能定位到哪里错了
三、本地开发的优化方案(可选)
如果你本地已经checkout了这个SVN仓库到本地目录,其实可以换成path类型的仓库,比SVN类型更快,还能实时同步本地修改(不用提交SVN就能看到改动):
"repositories": [ { "type": "path", "url": "../path/to/your/local/svn/checkout/Vendor/tt/core/trunk" }, { "type": "path", "url": "../path/to/your/local/svn/checkout/Vendor/tt/core-analytics/trunk" } ]
这个方案在本地开发时特别香,改完子包代码,依赖项目里直接生效,省了好多提交SVN的步骤。
最后再划个重点
核心就是两个点:每个子包单独配置SVN仓库,且package-path必须精确到trunk目录;清空缓存再测试。按这个配置来,应该就能解决你之前的问题了。
内容来源于stack exchange

