composer安装慢90%因镜像未生效:必须严格满足repo.packagist键名(单数)、type显式为composer、url以/结尾三条件,否则静默回退官方源;需clear-cache并删vendor与lock文件,再用--no-dev --prefer-dist --optimize-autoloader加速。

Composer 导出(composer install)慢,90% 不是网络差,而是镜像没生效、缓存没命中、或下载路径仍走 GitHub —— 配错一个字符、少一个斜杠、用户权限不对,都会静默 fallback 到 packagist.org 或 codeload.github.com。
为什么 composer install 总卡在 Downloading 或 Loading composer repositories
根本不是 Composer 本身慢,而是它默认从 packagist.org 拉元数据(20MB+ packages.json),再从 GitHub 下 ZIP 包。国内直连常 TLS 握手失败、DNS 解析慢、无 CDN、断点续传失效。更关键的是:镜像只代理元数据,不托管 ZIP 包 —— 所以即使配了阿里云镜像,Downloading https://codeload.github.com/... 依然会出现。
- 执行
composer install -vvv | grep "Downloading",若看到github.com,说明 ZIP 下载路径没变,镜像只改了元数据源 - 确认是否真用了镜像:
composer config -g repo.packagist输出必须是完整 JSON,形如{"type": "composer", "url": "https://mirrors.aliyun.com/composer/"};空、字符串、或仍是packagist.org都代表没生效 - URL 必须 HTTPS + 末尾带
/:https://mirrors.aliyun.com/composer/✅,https://mirrors.aliyun.com/composer❌(会拼成/composerpackages.json导致 404)
composer config -g repo.packagist 为什么总静默失败
这条命令极易“看似成功实则无效”,因为必须同时满足三个硬条件,缺一即回退官方源,且不报错:
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 键名必须是
repo.packagist(单数,写成repos.packagist或packagist.org全部被忽略) - 第二参数必须显式写
composer:composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/✅;漏掉composer就 fallback ❌ - 执行后必须立刻
composer clear-cache,否则旧缓存里的packages.json还在,镜像等于白配
怎么让缓存真正起作用,而不是“配了但没用”
Composer 缓存分层,但只有 cache-files-dir 下的 ZIP 包能离线复用;其他路径(如 repo/)断网即失效。很多人设了 cache-dir 却发现没提速,是因为:
-
cache-dir是混合目录(含repo/、vcs/、files/),而只有files/子目录下的monolog/monolog/2.10.0.0/monolog-monolog-6a8c4b5.zip这类结构才能被--prefer-dist直接读取 - 先清旧配置:
composer config --global --unset cache-dir,避免和cache-files-dir冲突 - 设精准路径:
composer config --global cache-files-dir /path/to/offline-cache,然后用composer install --prefer-dist --no-autoloader --no-scripts触发写入 - CI 中必须挂载该路径(如 GitHub Actions 的
actions/cache),key 要包含composer.lockhash,否则跨版本污染
生产环境导出的黄金组合命令
本地开发可宽松,但部署或 CI 构建时,以下参数组合能省掉 30–60% 时间,且避免 autoload 扫描开销:
-
--no-dev:跳过require-dev里的大包(如phpunit、larastan),生产完全不需要 -
--prefer-dist:强制走 ZIP 下载,跳过git clone、checkout、submodule等耗时操作 -
--optimize-autoloader(或-o):生成静态 classmap,PHP 7.4+ 进 opcache,必须开 -
--classmap-authoritative(或-a):告诉 autoloader “映射里没有,那就真没有”,彻底跳过文件系统扫描 —— 开发环境绝对不要加
最终命令示例:composer install --no-interaction --no-dev --prefer-dist --optimize-autoloader --classmap-authoritative。注意:如果项目用了热重载或运行时动态加载类,--classmap-authoritative 会导致类找不到 —— 它只适合构建后不再改代码的场景。










