需检查依赖冲突:运行 composer why-not 指定版本定位拦路包,勿删 composer.lock,常见于 laravel 升级未同步配套包或老旧 bundle 锁定旧 php/symfony 版本。

报错信息里有 “Your requirements could not be resolved” 怎么办
这说明 Composer 算不出一套能同时满足所有依赖的版本组合,不是网络问题,也不是权限问题,而是 composer.json 里写的约束之间打架了。
常见场景:升级 Laravel 后没同步更新配套包;手动改过某个包的版本号;或项目用了老旧 bundle(比如 jms-security-extra-bundle),它锁死了 PHP 5.6 或 Symfony 2.x 的老版本。
- 先别删
composer.lock—— 它记录的是已验证可行的版本,删了反而可能让问题更难复现 - 运行
composer why-not php:8.3(把php:8.3换成你实际想用的版本)直接看哪个包在拦路 - 如果确认是 PHP 版本不匹配(比如提示
php >=7.4.0 ,但你装了 8.2),临时绕过可用:<code>composer install --ignore-platform-reqs,但仅限调试,上线前必须修复真实兼容性 - 注意:加了
--ignore-platform-reqs后,ext-pcntl、ext-redis这类扩展缺失也不会报错,得自己心里有数
执行卡在 “Loading composer repositories” 或下载超时
国内直连 packagist.org 基本不可靠,DNS 解析慢、连接中断、TLS 握手失败都可能发生,这不是你本地环境坏了,是网络链路被卡住了。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 换镜像源最有效:
composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/ - 如果公司内网有代理,记得配 HTTP 代理:
composer config -g http-proxy http://10.0.1.100:8080 - 某些企业防火墙会拦截 SNI 请求,可临时关 TLS 验证(仅限排查):
composer config -g secure-http false,但生产环境禁用 - 避免在 CI 脚本里反复执行
config切源 —— 多余 DNS 查询反而拖慢整体构建
Permission denied: failed to create directory vendor/
这是典型的权限错乱,尤其多见于 WSL、Docker 或 sudo 后遗症。根本不是 Composer 不行,是你当前用户没权利往那个路径写东西。
- 绝对不要用
sudo composer install—— 这会让vendor/下所有文件属主变成root,后续php artisan或本地服务器启动就直接失败 - 如果是 WSL 且项目放在
/mnt/c/xxx下,NTFS 不支持 Linux 权限模型,chmod无效,唯一稳解是把项目移到 WSL 原生路径,比如~/projects/myapp - 若
vendor/已被root占据,先sudo rm -rf vendor/,再普通用户重试 - 全局缓存目录出问题也类似:
sudo chown -R $USER:$USER ~/.composer/cache,之后跑composer clear-cache验证
PHP 扩展缺失导致安装中途退出
Composer 自己不依赖太多扩展,但它装的包会检查运行时环境。比如装 laravel/horizon 会硬要求 ext-pcntl,缺了就停在那,错误信息里明确写着 the requested PHP extension pcntl is missing。
- 用
php -m看已启用模块,重点核对:openssl、mbstring、curl、json、zip、pcntl(CLI 场景)、pdo_mysql(DB 相关) - CentOS/RHEL 系统常需手动装扩展:
yum install php-mbstring php-bcmath php-opcache - macOS + Homebrew 用户注意:PHP CLI 和 Web Server(如 Apache)可能用不同配置,
php -v和浏览器phpinfo()显示的版本/扩展可能不一致 - 扩展名大小写敏感,
php -m输出是小写,但php.ini里写成extension=mbstring.so才对,写成MBString就加载失败
最常被忽略的一点:报错里出现多个“missing extension”,不代表要全装——有些只是 dev-only 包需要的,比如 phpunit 依赖 ext-dom,但线上部署加 --no-dev 就能绕过。别一看到缺就全装,先分清场景。










