执行 composer config -g repo.packagist false 后需显式配置所有依赖仓库,否则包找不到;必须为每个源同时设置 type 和以斜杠结尾的 url,缺一不可。

composer config -g repo.packagist false 后包找不到,不是配置错,是源没声明
关掉默认源后,Composer 不再访问 packagist.org,也不会自动探测包在哪——它只查你 repositories 里明确定义的地址。一旦漏配,composer require vendor/name 就直接报 Package not found。
- 必须先执行
composer config -g repo.packagist false(注意键名是repo.packagist,不是repo.packagist.org) - 再为每个要用的包显式添加仓库,例如:
composer config -g repositories.aliyun type composer和composer config -g repositories.aliyun url https://mirrors.aliyun.com/composer/ - 若某包只在官方源存在(比如小众私有包),就得单独加回:
composer config -g repositories.official type composer+composer config -g repositories.official url https://packagist.org - 验证是否生效:
composer config -g -l | grep repo.packagist应输出repo.packagist=false;composer config -g -l | grep repositories应列出你添加的条目
镜像 URL 必须带 type 且结尾有斜杠,否则 HTTPS 请求会失败
防火墙环境下尤其敏感:URL 缺少 / 或漏写 type,Composer 会 fallback 到原始 https://packagist.org,触发 TLS 内容审查并静默中断连接。
- 正确写法(两行不可少):
composer config -g repositories.packagist.org.type composer+composer config -g repositories.packagist.org.url https://mirrors.aliyun.com/composer/(末尾/不可省) - 错误示例:
composer config -g repositories.packagist.org url https://mirrors.tuna.tsinghua.edu.cn/composer(缺type、缺/)→ 配置被忽略 - Windows 用户注意路径分隔符:设
cafile时用双反斜杠,如C:\certs\company-ca.crt - 临时绕过:
composer require vendor/name --repository=https://packagist.org,但仅限调试,不用于 CI
repositories.exclude 不是包级过滤,只是源内“假装没这包”
exclude 字段只对当前仓库生效,不能阻止同名包从其他源装进来。它不改变依赖解析顺序,也不提供白名单能力。
- 写
"exclude": ["acme/*"]只会让 Composer 在查这个私仓时跳过匹配包,但若acme/tool同时存在于packagist.org,仍会被拉取 -
exclude不支持后缀匹配("*tool"是非法语法) - 想真正锁定某包来源,只能用
type: package显式声明,并放在repositories数组最前面 - 别依赖
conflict拦包——它只在解析失败时报错,不阻止元数据下载或缓存写入
git archive 或 GitHub ZIP 下载缺文件?先看 .gitattributes
不是 Composer 拉取失败,也不是远程分支没更新——tests/、examples/、phpunit.xml 缺失,大概率是 .gitattributes 里写了 export-ignore,而你正用 git archive(GitHub “Download ZIP”、Packagist dist 构建都调用它)获取代码。
- 快速确认:
cat .gitattributes | grep export-ignore,若输出类似/tests export-ignore就坐实了 - 验证影响:
git archive --list HEAD | grep tests若无输出,说明已被过滤 - 常见坑:
tests export-ignore会误删mytests.php,必须写成/tests export-ignore(开头加/) -
.gitattributes自己也建议显式排除:.gitattributes export-ignore,避免编辑时误删
repo.packagist=false 后忘记补全所有必需仓库,以及镜像 URL 缺少 type 和结尾斜杠——这两处一错,整个白名单策略就失效。











