composer install --verify 是唯一强制校验 dist 包完整性的开关,它在解压前比对每个下载包与 composer.lock 中的 dist.sha256;而 verify-checksums --strict(需 composer_experimental=1)才是唯一验证已安装 vendor/ 是否完整的命令,二者校验时机与对象不同,必须组合使用才可靠。

composer install --verify 是唯一强制校验 dist 包完整性的开关
它强制对每个下载的 dist 包(zip/tar)在解压前比对 composer.lock 中记录的 dist.sha256,不匹配直接中止。这个校验不依赖镜像是否可信,只认 lock 文件里的哈希值。
关键前提:composer.lock 必须由可信流程生成(比如 CI 构建产出、经 GPG 签名验证)。如果 lock 文件里某包缺失 dist.shasum 字段(旧版 Composer 生成或手动编辑过),composer install --verify 会报错:Missing shasum for package xxx。
-
--verify不兼容--no-install或--dry-run,同时使用会报错 - 它仍走本地缓存,但校验发生在解压前——所以即使缓存被污染,也能当场发现
- 国内镜像(如阿里云)若返回的 dist 包与 Packagist 官方不一致(比如打了补丁但没更新哈希),
--verify一定会失败,这不是 bug,而是安全机制在起作用
verify-checksums --strict 才是真正验证已安装 vendor 是否“完整”
verify-checksums 是唯一读取磁盘、逐包计算实际文件 SHA256 并与 composer.lock 比对的命令,但它默认不可见,必须启用实验模式:COMPOSER_EXPERIMENTAL=1 composer verify-checksums --strict。
不加 --strict 时,哪怕发现不匹配也只警告并返回 0,CI 流水线会误判为成功;加了才真正中断流程。
- 它跳过
type: "path"或没有dist.sha256字段的包(比如老旧私有包),但不会报错,容易漏检 - 它不校验
vendor/composer/autoload_*.php这类生成文件,只校验原始 dist 包发布的结构 - 手动改过
vendor/autoload.php会导致失败——它不在生成文件列表里,但会被扫到
镜像配置本身不影响 verify-checksums 的行为
verify-checksums 只读 composer.lock 里的 dist.sha256,然后重新计算本地 vendor/{package}/ 目录的哈希值。你用的是 https://mirrors.aliyun.com/composer/ 还是官方源,对它的行为没影响——镜像只决定 install 阶段从哪下 zip,不影响后续校验依据。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
但要注意一个陷阱:如果镜像源返回的 dist 包和 Packagist 官方不一致(比如打了补丁但没更新 dist.sha256),那么 verify-checksums 一定会失败。此时该做的不是关掉校验,而是换镜像、切回官方源、或联系镜像维护方确认一致性。
-
composer config -g repo.packagist写错键名(比如写成repos.packagist)、缺type值、URL 少末尾/,都会静默失效 - 项目级
repositories配置(写在composer.json里)优先级高于全局配置,常导致换镜像后仍卡在 “Loading composer repositories”
为什么 composer install 成功后 verify-checksums 却失败
因为两者校验时机和对象完全不同:composer install 只在校验刚下载的 zip/tar 包(解压前)是否匹配 composer.lock 中的 dist.sha256;一旦解压落地,就不再回头检查。verify-checksums 是真打开 vendor/ 目录,递归读所有文件(排除 .git、tests/ 等非发布路径),归并字节流再算一次 SHA256。
常见触发失败的场景包括:CI 构建中用了 --prefer-source、本地缓存被污染后重装却复用了坏包、或 vendor/autoload.php 被手动修改过——这些都不会在 install 阶段暴露,只有 verify-checksums 能揪出来。
真正卡住部署的最小可靠组合不是单靠 composer install,而是 composer install --verify + COMPOSER_EXPERIMENTAL=1 composer verify-checksums --strict,且后者必须在前者成功之后立即执行。










