设为布尔 false 无效,因 Composer 仅接受 null、对象或删除 repo.packagist;正确方式是设为 null 或 --unset,并手动添加替代仓库。

执行 composer config --global repo.packagist false 并不能真正禁用 Packagist 默认源,它只会把全局配置里 repo.packagist 的值设为布尔 false,而 Composer 在运行时会忽略这个非法值,自动 fallback 回默认的 Packagist.org 源 —— 所以这条命令看似生效,实则无效。
为什么 repo.packagist false 不起作用?
Composer 的配置系统对 repo.packagist 这个键有特殊处理逻辑:它只接受 null、对象(自定义仓库配置)或完全删除该键。布尔 false 不在合法取值范围内,Composer 会静默丢弃并启用内置默认源。
- 运行
composer config --global repo.packagist可能返回false,但这只是配置文件里存了个无意义的值 -
composer show或安装包时仍会访问https://packagist.org - 错误日志里看不到相关警告,容易误以为已禁用
正确禁用 Packagist 默认源的方法
必须显式移除或覆盖默认源。两种可靠方式:
- 用
null覆盖:composer config --global repo.packagist null - 完全删除该配置项:
composer config --global --unset repo.packagist
执行后,可通过 composer config --global repo.packagist 验证输出是否为空(无返回)或显示 null。
composer config --global repo.packagist null
禁用后必须手动添加其他源,否则无法安装任何包
一旦移除了 Packagist,默认没有任何可用仓库。你必须至少配置一个替代源,比如私有 Packagist 镜像或私有 Satis 服务:
- 添加国内镜像:
composer config --global repo.packagist composer https://packagist.phpcomposer.com - 添加私有仓库:
composer config --global repos.my-private '{"type": "composer", "url": "https://packages.example.com"}' - 若仅想强制走本地
path类型仓库,也要显式声明:composer config --global repos.local '{"type": "path", "url": "./packages/*"}
否则运行 composer require monolog/monolog 会直接报错:[InvalidArgumentException] Package monolog/monolog not found.
检查当前生效的仓库列表
最直观的方式是运行:
composer config --global repos
或更彻底地看所有仓库(含默认):
composer config --list | grep -A 5 "repositories"
注意:repos 是复数形式,repo.packagist 是旧式单点配置键;新版 Composer(2.0+)推荐统一用 repos 数组管理所有源,包括显式禁用默认源:
composer config --global repos '{"packagist.org": false}'
这种写法在 Composer 2.2+ 中才被正式支持,且必须用 "packagist.org" 作为键名(不是 packagist),否则无效。
真正禁用 Packagist 的关键不在“设成 false”,而在“让 Composer 认不出默认源”——要么删掉它,要么用 null 覆盖,再补上你自己的源。漏掉后者,项目就卡死在依赖解析阶段。










