运行 composer 时加了 --no-scripts 仍要检查锁文件来源,是因为该参数仅跳过安装过程中的脚本执行阶段,而不会跳过依赖解析和验证阶段。composer 在读取 composer.lock 时,会校验其哈希值以确保包列表未被篡改,这一安全检查独立于脚本执行逻辑之外。

为什么 --no-scripts 不跳过锁文件校验?
因为锁文件校验发生在依赖解析阶段,而脚本执行发生在安装阶段。这两个阶段是 Composer 生命周期中独立的步骤。--no-scripts 只影响安装阶段的脚本钩子,不影响前置的完整性检查。

composer install --no-scripts
上述命令会正常读取并校验 composer.lock,但跳过 post-install-cmd 等脚本的执行。如果锁文件被篡改或版本不匹配,Composer 仍会报错退出。
如何完全跳过锁文件校验?
若需跳过锁文件校验,可使用 --ignore-platform-reqs 配合其他参数,但更直接的方式是使用 --no-lock(如果可用)或确保锁文件与 composer.json 一致。实际上,Composer 没有直接跳过锁文件校验的参数,除非使用 --dry-run 或修改配置。

composer install --no-scripts --no-lock
注意:--no-lock 并非标准参数,实际使用中应通过 composer update --lock 生成新锁文件,或使用 --no-install 跳过安装但仍校验锁文件。若需完全绕过校验,需手动删除锁文件并重新生成。
基于 composer.lock 哈希校验失败的具体问题
当 composer.lock 的哈希值与预期不符时,Composer 会抛出异常。这通常发生在团队协作中,有人修改了锁文件但未提交,或本地环境差异导致包版本不一致。此时,即使使用 --no-scripts,Composer 仍会拒绝继续执行,以确保依赖一致性。


















