Composer 2.2+ 废弃 repo.packagist,必须改用 repositories.packagist.org 顶层键或 repositories 数组形式,否则静默忽略;需重生成 composer.lock、清缓存,并校验私有源 dist.type 为 zip/tar。

composer.json 里 repositories 配置键名失效了
Composer 2.2+ 开始,repo.packagist 这种写法会被静默忽略——你改了镜像地址却还在走 packagist.org,八成是这个原因。
常见错误现象:composer install 明明配置了国内镜像,却卡在 packagist.org 域名解析;composer config -g --list 看到配置存在,但实际没生效。
- 旧写法(1.x 风格,2.2+ 不保证兼容):
"repo.packagist": {"url": "https://mirrors.aliyun.com/composer/", "type": "composer"} - 新写法(推荐,2.2+ 官方明确支持):
"repositories.packagist.org": {"url": "https://mirrors.aliyun.com/composer/"} - 或者用数组形式(也兼容):
"repositories": [{"type": "composer", "url": "https://mirrors.aliyun.com/composer/"}] -
注意:
repositories.packagist.org是顶层键,不能嵌套在repositories数组里;两者混用可能导致被完全忽略
composer.lock 重生成后仍报错 Invalid package information
这不是锁文件坏了,而是私有源返回的 packages.json 格式不满足 Composer 2.x 要求——尤其是 dist.type 字段。
典型表现:composer update 跳过某个私有包,不报错也不安装;或直接报 Invalid package information。
- 检查私有源根目录下的
packages.json,搜索"dist": { "type":,确认值是"zip"或"tar"(2.x 只认这两个) - Satis 用户需升级到 2.0+,并在
satis.json中显式设置"archive": {"format": "zip"} - 旧版 Satis 返回的
"type": "pack"已被 2.x 拒绝,无法绕过 - 改完后必须运行
composer clear-cache && composer update --no-install验证元数据是否能正常拉取
升级后 composer install 卡住或直接崩
不是网络问题,大概率是 composer.lock 里残留了 1.x 特性字段(比如 content-hash 结构差异、插件相关元数据),导致 2.x 解析失败。
使用ydata-profiling(前身为pandas-profiling)生成全面的数据质量报告,包含相关性分析、缺失值模式和基数检测。导出交互式HTML仪表板和JSON摘要。
别急着删 lock 文件——先验证是否真由 lock 引发:
- 运行
composer install --no-plugins --no-scripts -vvv,观察是否跳过插件后能继续 - 若仍崩,临时重生成 lock:
rm composer.lock && composer update --lock(注意:这会重算所有依赖版本) - 若项目依赖老插件(如
hirak/prestissimo),composer diagnose会高亮提示,此时应composer remove hirak/prestissimo,而非降级 Composer - 切勿执行
composer self-update --rollback——该命令根本不存在;唯一合法降级是composer self-update --1,但仅限紧急救火
ThinkPHP 5.* 项目升级 Composer 后命令报错
ThinkPHP 5.* 本身不强依赖 Composer,但它的安装器 topthink/think-installer 与 Composer 插件 API 绑定紧密。升级到 Composer 2.x 后,旧版 installer 会因 API 不兼容直接失败。
错误现象:composer create-project topthink/think 报 Class ThinkInstaller\Plugin not found 或类似插件加载失败。
- 解决方案:更新 installer 本身,运行
composer global require topthink/think-installer:^2.0 - 确认框架版本不变——这只是补丁层兼容,不影响
thinkphp/framework的实际版本 - 若全局 require 失败,说明本地 Composer 全局路径权限异常,可改用项目级安装:
composer require topthink/think-installer:^2.0 --dev - 升级后务必测试
composer update和composer dump-autoload是否正常触发自动加载逻辑
最常被忽略的是:镜像源配置改完没清缓存,composer.lock 没重生成,私有源 dist.type 没校验——三者叠加,问题就变成“怎么都试不对”。

















