composer install 跳过 lock 校验需用 --ignore-platform-reqs --no-scripts --no-plugins,但推荐先 composer update --lock 同步锁文件;其变慢主因是插件、镜像源慢或 vendor 损坏,优化可用国内镜像、--no-dev、dump-autoload --optimize 等。

composer install 时如何跳过自动更新检查
Composer 默认在 install 时会检查 composer.lock 是否与 composer.json 一致,若不一致则报错并拒绝安装——这不是“自更新检查”,而是依赖锁定校验。真正让人误以为“卡住”的,常是插件(如 hirak/prestissimo 已弃用)或远程元数据拉取慢,而非 Composer 自身升级逻辑。
要跳过 lock 文件校验(仅限明确知道改动安全的 CI/临时调试场景),可用:
composer install --ignore-platform-reqs --no-scripts --no-plugins
但更常见且安全的做法是先同步 lock 文件:
-
composer update --lock:只重写 lock 文件,不下载包(最快方式) -
composer install --dry-run:预检是否匹配,不执行安装,便于排查不一致原因 - 若因修改了
composer.json(如改了 PHP 版本约束),必须先update --lock或删 lock 后重生成
为什么 composer install 比 update 快,但有时还是慢
install 本应极快——它只读 composer.lock 并按记录解压 vendor,不走依赖解析。但以下情况会让它变慢:
- 启用了
fxp/composer-asset-plugin(已废弃)或未清理的全局插件,会触发额外元数据请求 - 镜像源不可用,fallback 到 packagist.org,TLS 握手 + DNS 解析拖慢首请求
- vendor 目录存在但部分包损坏,Composer 会逐个校验完整性(尤其开启
archive-format或使用--prefer-dist时) - PHP OPcache 未启用或配置过激(如
opcache.validate_timestamps=1),导致每次加载 autoloader 都 stat 文件
验证是否为网络问题:加 -vvv 看卡在哪一步,重点关注 Downloading https://.../packages.json 类日志。
实测有效的速度优化组合命令
不依赖第三方插件(如旧版 prestissimo),纯官方机制提速:
- 强制国内镜像:
composer config -g repo.packagist composer https://packagist.phpcomposer.com(注意:该镜像已停,推荐https://mirrors.aliyun.com/composer/) - 禁用非必要功能:
composer install --no-dev --no-scripts --no-autoloader(CI 场景下最有效) - 加速 autoloader:
composer dump-autoload --optimize --classmap-authoritative(生成完整 classmap,跳过 PSR-4 动态查找) - 限制并发数防 DNS 打爆:
COMPOSER_PROCESS_TIMEOUT=600 composer install(避免默认 300 秒超时重试)
注意:--classmap-authoritative 要求所有类必须在 classmap 中,否则运行时报 Class not found——适合全包由 Composer 管理的项目,不适合混用 require_once 的老项目。
composer global update 为什么会卡住,怎么绕开
composer global update 卡住,90% 是因为全局包(如 laravel/installer、phpunit/phpunit)依赖树复杂,且默认启用 --with-dependencies,递归更新全部子依赖。
安全又快的做法是精确控制:
- 查当前装了什么:
composer global list - 单独升级某一个:
composer global require laravel/installer:^5.0 --update-with-dependencies(显式指定版本,避免隐式全量解析) - 彻底清掉重装(适合调试):
rm -rf ~/.composer/vendor && composer global install(注意备份~/.composer/composer.json) - 禁用 packagist 全局搜索:
composer global config -g repo.packagist false,只允许已知包源
global 命令本质是操作 ~/.composer/vendor,它的 lock 文件不受项目级影响,但插件和配置是全局共享的——一个插件异常,所有 global 操作都可能变慢。










