正确写法必须为composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/,三要素缺一不可:键名repo.packagist(非repos)、type值composer、url须https且末尾带/,否则静默回退官方源。

composer config -g repo.packagist 命令必须带末尾斜杠
不加 / 就等于没配——Composer 2.2+ 会静默 fallback 到 packagist.org,composer install 还是卡在 0 B/s,composer diagnose 却仍显示 Repo packagist.org is default,你根本看不到任何报错。
正确写法只有一种:composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/ 或 composer config -g repo.packagist composer https://mirrors.cloud.tencent.com/composer/。
-
repo.packagist是固定键名,不能写成repos.packagist、repositories.packagist或packagist.org -
composer是必须显式的type值,漏掉就无效 -
url必须以https://开头,且结尾有且仅有一个/;加/packages.json或/dist会导致 404 - 验证是否生效:运行
composer config -g repo.packagist,输出必须是完整 JSON,形如{"type":"composer","url":"https://mirrors.aliyun.com/composer/"}
项目级配置会清空 repositories,不是追加
进项目目录后执行 composer config repo.packagist composer https://mirrors.aliyun.com/composer/(不加 -g),它不会“添加”镜像,而是直接全量替换 composer.json 里的 repositories 字段。
腾讯云跨账号资源迁移工具,支持将账号A的VPC、CLB、NAT、CVM、安全组等资源迁移至账号B,通过CCN云联网实现跨账号网络互通,提供自动扫描、配置生成、Terraform部署功能。
如果项目原本配置了私有源(比如 Git 仓库或企业 Nexus),执行后整个 repositories 就只剩阿里云一项,私有包立刻拉不到。
- 想保留原有源,得手动编辑
composer.json:在repositories对象里加一条"packagist": {"type": "composer", "url": "https://mirrors.aliyun.com/composer/"} - 同时确保根节点(非
repositories内部)有"packagist.org": false - 检查是否被覆盖:运行
composer config -l | grep repositories.packagist,或直接打开composer.json搜索repositories - 某些 Laravel 脚手架模板自带
"repositories": {"packagist.org": false},这是禁用了默认源却没指定替代源,结果就是Could not find package
已有 composer.lock 时 install 必然 hash 不匹配
composer.lock 文件里硬编码了从官方源下载的包哈希和 dist.url。切换镜像后,Composer 仍按原路径去阿里云或腾讯云找 ZIP 包——但两家镜像的 dist 映射路径与 packagist.org 不同,校验直接失败,报错类似 The contents of ... do not match its expected checksum。
- 最稳妥做法:删掉
vendor/和composer.lock,再跑composer install - 临时绕过:用
composer update --lock刷新 lock 文件,但前提是当前能连通新镜像并成功解析元数据 - CI 场景建议统一加
rm -rf vendor composer.lock步骤,避免缓存干扰 - 别指望
composer clear-cache能解决这个,它清的是元数据缓存,不影响 lock 文件里的硬编码地址
全局配置在宝塔/CI 等环境常不生效
composer config -g 写的是当前用户的配置文件:~/.composer/config.json(Linux/macOS)或 %APPDATA%\Composer\config.json(Windows)。但在宝塔、Jenkins、systemd 服务里,真正执行命令的用户往往是 www、jenkins 或 root,不是你登录 shell 的账号。
- 排查方法:在宝塔 PHP 管理器或 CI 脚本开头加
whoami && echo $HOME,确认执行用户,再用该用户身份运行composer config -g repo.packagist - CI 场景更推荐临时参数:直接用
composer install -vvv --repository-url=https://mirrors.aliyun.com/composer/,不依赖任何配置文件 - 宝塔「一键部署」前,先切到
www用户执行配置;或改用面板内置的「自定义脚本」方式,在部署阶段注入镜像参数 - 全局 require(如
composer global require larastan/larastan)走的是~/.composer/composer.json的配置,和全局 config 是两套体系,需单独配










