需在 composer.json 的 repositories 数组中添加独立项 {"packagist.org": false},并确保私有仓库支持 Composer 协议且镜像全部依赖,否则安装会失败。

直接禁用 Packagist 默认源是可行的,但必须确保私有仓库已正确配置且能覆盖所有依赖 —— 否则 composer install 会因找不到包而失败。
如何彻底移除 Packagist 默认源
Composer 从 2.0 开始默认启用 packagist.org 作为全局源。要禁用它,需在项目根目录的 composer.json 中显式设置 repositories 并将 packagist 设为 false:
{
"repositories": [
{
"type": "composer",
"url": "https://your-private-repo.com"
},
{
"packagist.org": false
}
],
"require": {
"monolog/monolog": "^2.10"
}
}
注意:{"packagist.org": false} 必须是 repositories 数组中的一个独立对象,不能合并到其他仓库配置里。
为什么只写 "packagist": false 不生效
常见错误是写成 "packagist": false 或 "packagist.org": false 却放在根级别或仓库对象内部 —— 这两种写法 Composer 都会忽略。
-
packagist.org是完整域名,拼写错误(如少点、大小写)会导致禁用失败 - 该配置仅在
repositories数组内作为独立项才被识别 - 如果使用
composer config --global全局设置,同样需要把{"packagist.org": false}放进全局repositories列表中
私有仓库必须支持 packages 和 providers 接口
禁用 Packagist 后,Composer 会完全依赖你声明的私有源提供所有元数据。若私有仓库只是静态文件托管(如 Nginx 目录列表),composer install 会报错:
[Composer\Repository\InvalidRepositoryException] No valid composer.json was found in the package repository
确保私有源满足以下任一条件:
- 基于
satis或toran proxy构建,已生成完整packages.json - 使用
private-packagist或Artifactory等商业服务,并启用了 Composer API 模式 - 自建服务实现了 Composer 的 Composer Repository 协议,至少响应
/packages.json和/p/{vendor}/{package}.json
验证是否真正禁用了 Packagist
运行以下命令检查当前生效的源列表:
composer config --list | grep repositories
再执行安装时加 -vvv 查看实际请求地址:
composer install -vvv 2>&1 | grep 'Downloading.*\.json'
如果输出中出现 packagist.org 相关 URL,说明禁用未生效;只看到你的私有域名,才表示成功隔离。
最易被忽略的一点:私有仓库若未镜像 Packagist 上的全部依赖(包括 php 扩展约束、composer-plugin 类型包等隐式依赖),即使源禁用成功,安装仍可能中断 —— 这类问题不会报“找不到包”,而是卡在 Resolving dependencies 阶段,需用 composer why-not 逐个排查缺失的 provider 包。










