composer validate 是发布 PHP 包前校验 composer.json 合规性的轻量命令,支持基础校验、--strict 严格模式及 --no-check-* 跳过选项,可集成至 Git Hook 或 CI 流程。

运行 composer validate 是发布 PHP 包前快速确认 composer.json 格式与规范是否合规的最直接方式。它不安装依赖,只校验文件结构、字段合法性、语义正确性(比如版本约束格式、必需字段是否存在)以及常见陷阱(如重复包名、无效类型等)。
基础验证:检查语法和基本规范
在项目根目录下执行:
composer validate
默认会检测:
• JSON 语法是否合法
• 是否包含必需字段(name、type、autoload 或 autoload-dev)
• name 是否符合 vendor/name 格式且不含非法字符
• version 字段若存在,是否为合法的语义化版本或开发分支别名(如 dev-main)
严格模式:启用全部校验规则
添加 --strict 参数可激活更严格的检查,推荐在 CI 或发布前使用:
composer validate --strict
此时还会校验:
• 所有引用的 autoload 映射路径是否真实存在(仅当路径是相对路径且可访问时)
• require 和 require-dev 中的包名是否都遵循小写字母+连字符+点号的命名规范
• license 字段是否为 SPDX 认可的许可证标识符(如 MIT、Apache-2.0),而非自由文本
跳过某些检查(慎用)
个别场景下可临时忽略特定问题(例如尚未完成的 autoload 配置),但不建议用于正式发布:
composer validate --no-check-all --no-check-publish
常用选项包括:
• --no-check-all:跳过所有扩展检查(如路径存在性、许可证有效性)
• --no-check-publish:跳过仅影响 Packagist 发布的检查(如 description 长度、homepage 格式)
• --no-check-lock:不校验 composer.lock(即使存在)
集成到发布流程中
把校验作为 Git Hook 或 CI 步骤能有效拦截问题:
- 在
.git/hooks/pre-push中加入composer validate --strict || exit 1 - GitHub Actions 示例步骤:
- name: Validate composer.json
run: composer validate --strict - 校验失败时会输出具体错误位置(如
./composer.json does not contain a "description" key),根据提示修改即可
基本上就这些。validate 命令轻量、快速、无副作用,是 Composer 生态里最容易被忽略却最值得坚持的发布守门员。










