Composer中文镜像会跳过本地包,因为镜像仅代理远程packagist.org索引、不支持path协议,且repositories按顺序“命中即停”,若镜像先返回404则终止查找,不再尝试后续path仓库;必须将path仓库置顶并显式禁用packagist.org才能生效。

为什么本地开发时 Composer 中文镜像会跳过你的本地包
因为 Composer 默认只从配置的仓库拉取远程包,path 类型的本地仓库必须显式启用 —— 即使你已配置了清华、阿里等中文镜像,composer install 仍会忽略 repositories 中的 path 条目,除非你关掉镜像或做针对性排除。
常见现象:composer install 报错 Could not find package your/local-package,但 composer show your/local-package 能查到,说明镜像代理拦截了本地仓库请求。
- 中文镜像(如
https://mirrors.aliyun.com/composer/)本质是远程 proxy,不支持解析本地path协议 -
repositories的加载顺序很重要:Composer 会按列表顺序查找包,一旦在镜像中 404 就终止,不会 fallback 到后续的path仓库 - 解决核心:让本地包“绕过”镜像,直接走本地文件系统
如何让 path 仓库优先于中文镜像生效
关键不是禁用镜像,而是把本地 path 仓库声明为 packagist.org 的替代,并设为最高优先级。
在项目根目录 composer.json 的 repositories 数组开头插入:
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
{
"repositories": [
{
"type": "path",
"url": "../your-local-package"
},
{
"type": "composer",
"url": "https://mirrors.aliyun.com/composer/"
}
]
}
同时必须禁用 Packagist 官方源,否则 Composer 仍会先查官方源(被镜像代理):
- 运行
composer config --unset repos.packagist(移除默认 packagist.org) - 或在
composer.json中显式关闭:"packagist.org": false(放在repositories同级) - 确保
your-local-package的name和version字段与 require 中一致,例如"your/local-package": "dev-main"
调试时频繁修改本地包,如何避免反复 dump-autoload
Composer 的自动加载器默认为 PSR-4 生成静态映射,本地包代码变动后,composer dump-autoload 不是必须的 —— 只要目录结构和命名空间没变,PHP 直接读文件即可。
- 确认本地包
composer.json中autoload使用的是"psr-4"或"classmap",而非"files"(后者需重新 dump) - 开发中可加
"autoload-dev"支持测试类,无需每次重装 - 如果用了符号链接(
ln -s),确保目标路径可读,且 Web 服务器用户有权限访问 - 临时调试可加
--no-cache参数:composer install --no-cache,防止镜像缓存干扰
遇到 “Package is not installed” 却能正常 require 的原因
这是 Composer 的“软安装”行为:当 path 仓库命中后,它只是创建 symlink(或 copy),并不写入 vendor/composer/installed.json 的完整元数据 —— 所以 composer show 查不到,但 PHP require 能加载。
- 验证是否生效:检查
vendor/your/local-package是否为符号链接(Linux/macOS)或 junction(Windows) - 若需完整元数据(比如插件依赖检测),加
"options": {"symlink": false}到path仓库定义中,强制 copy - 注意:copy 模式下修改本地源码不会实时反映,必须重新
composer update your/local-package
最易被忽略的是 packagist.org 的隐式启用 —— 很多人只改了 repositories 却没关掉默认源,结果本地包永远被跳过。

















