composer如何跳过自更检查_composer运行速度优化【实操】

4次阅读

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

composer如何跳过自更检查_composer运行速度优化【实操】

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/installerphpunit/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 操作都可能变慢。

text=ZqhQzanResources