Composer install 卡在「Resolving dependencies」因默认执行完整依赖图解析,含版本检查、平台验证、冲突检测及远程元数据拉取;常见原因包括 dev-master 引发实时查询、镜像不同步、PHP/扩展不满足 platform 要求。

Composer install 为什么会卡在「Resolving dependencies」
因为 Composer 默认会执行完整的依赖图解析,包括版本约束检查、平台要求验证、冲突检测,甚至远程包元数据拉取。这个阶段不下载代码,但耗时可能远超预期,尤其在 lock 文件缺失或含模糊版本号(如 ^2.0)时。
常见诱因:
- 本地
composer.json中用了dev-master或分支别名,触发对 GitHub/GitLab 的实时元数据查询 - 启用了
packagist.org镜像但镜像不同步,导致回源失败后反复重试 - PHP 版本或扩展(如
ext-zip)不满足某依赖的platform声明,Composer 会尝试大量组合排除
快速定位:加 -v 参数运行 composer install -v,看最后卡在哪一行;若停在 Reading composer.json of vendor/package (1.2.3),大概率是某个包的 composer.json 无法获取。
如何跳过依赖校验直接安装(仅限可信环境)
用 --no-scripts --no-plugins --ignore-platform-reqs 可绕过脚本执行、插件加载和 PHP/扩展版本检查,但不会跳过依赖兼容性本身——真正“跳过校验”的只有 composer install --no-interaction --prefer-dist 配合已存在的 composer.lock。
更安全的折中方案:
- 确保
composer.lock存在且由同环境生成,再运行composer install --no-dev(跳过 require-dev 校验) - 若明确知道某包与当前 PHP 不兼容但实际能跑,可用
--ignore-platform-req=php单独忽略 PHP 版本检查 - 禁用 packagist 元数据更新:设置
COMPOSER_NO_INTERACTION=1环境变量,防止交互式 fallback
注意:--ignore-platform-reqs 在 CI 中慎用,它可能让构建通过,但运行时报 Class not found 或 Call to undefined function。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
启用自动安全性检查(Security Checker)的正确姿势
Composer 自身不内置漏洞扫描,官方推荐的 security-checker 工具已归档;现在应使用 composer audit(Composer 2.5+ 内置),它对接 Symfony Security Advisory Database。
启用条件:
- 必须有
composer.lock,否则报错No composer.lock file found - 需联网访问
https://security.symfony.com,国内用户常因 DNS 或防火墙失败 - 默认只检查
require区块,加--dev才包含require-dev
实操建议:
- CI 流水线中加入
composer audit --no-dev || exit 1,阻断高危漏洞(CVSS ≥7.0) - 若审计失败但确认可接受风险,用
--format=json提取 CVE 编号,人工登记例外 - 避免用
composer update直接修复——先查composer show vendor/package确认当前版本,再针对性升级
lock 文件被篡改时 Composer 不报警?
不会主动报警,但会静默失败:当 composer.lock 中某包的 dist.sha256 与实际下载文件哈希不匹配,Composer 会删除已下内容并重试;若重试后仍不一致,最终报错 Signature mismatch 或 Invalid archive signature。
这依赖两个前提:
-
composer.lock必须由 Composer 自动生成(非手动编辑),否则sha256字段为空或格式错误 - 必须使用
dist模式安装(默认),若设了"preferred-install": "source",则跳过哈希校验
因此,关键动作是:CI 中始终运行 composer install --no-dev --prefer-dist,并确保 composer.json 里没写死 "preferred-install"。手动生成 lock 后,用 composer validate --strict 检查其结构合法性。

















