composer validate 只检查 composer.json 的 json 语法合法性和字段结构是否符合规范,不验证包存在性、版本可解析性或自动加载路径有效性。

composer validate 能检查什么
composer validate 是唯一官方支持的校验命令,它只验证 composer.json 的 JSON 语法是否合法、字段结构是否符合 Composer 规范(比如 name 格式、version 是否多余、require 是否为对象等)。它不检查包是否存在、版本是否可解析、脚本是否能执行——这些属于运行时问题,不在校验范围内。
为什么 composer validate 有时“没报错却装不上”
常见现象:执行 composer validate 返回 OK,但紧接着 composer install 报错,比如 Could not find package xxx 或 requires xxx ^2.0 but it is not installable。这是因为:
-
validate不联网,不查 Packagist 或私库 - 不解析版本约束(如
^1.2.3、dev-main)是否真实存在 - 不校验
autoload中的路径是否存在或类名是否冲突
真正暴露依赖问题,得靠 composer install --dry-run 或 composer update --dry-run,它们会模拟解析全过程。
加参数让校验更严格
默认 composer validate 允许非标准字段(比如自定义配置),用 --strict 可禁用宽松模式:
composer validate --strict
这会拒绝任何未在 Composer 官方 schema 中定义的顶级字段(如误写的 "autload" 拼写错误不会被发现,但多出的 "my-config" 会被拦下)。另外,若项目用了 composer.json 的替代路径(如 app/composer.json),必须显式指定:
composer validate app/composer.json
CI/CD 里别只信 validate
在 GitHub Actions 或 GitLab CI 中,仅跑 composer validate 容易漏掉真实失败点。建议组合使用:
-
composer validate --strict(语法+结构) -
composer install --no-interaction --no-progress --dry-run(依赖可解性) -
composer dump-autoload --no-interaction --dry-run(自动加载配置有效性)
其中 --dry-run 是关键:它跳过写入操作,只做解析和检查,速度快且安全。很多人卡在没加这个参数,导致 CI 里真去装包、耗时又污染缓存。
校验不是一锤子买卖;JSON 合法只是第一关,依赖能否落地才是实际分水岭。










