composer导出慢主因是lock文件残留github dist url、镜像未生效或缓存污染;需删composer.lock后重装,确保config -g repo.packagist输出正确json,且执行clear-cache。

Composer 导出(composer install --no-dev --prefer-dist 或 composer create-project)慢,90% 不是网络带宽问题,而是元数据拉取未走镜像、ZIP 包仍直连 GitHub、缓存污染或并发不足——导出环节对镜像生效和锁文件状态极度敏感。
为什么 composer install --no-dev 还卡在 Downloading
导出时用的是 composer.lock 中记录的 dist.url,不是当前镜像配置。一旦 lock 文件里存的是 https://api.github.com/ 或 https://codeload.github.com/,哪怕全局镜像配得再全,也照旧直连 GitHub。
- 执行
composer install -vvv | grep "Downloading\|dist.url",若输出含github.com,说明 lock 未刷新 -
--no-dev不改变 dist URL 来源,它只跳过 require-dev 依赖解析 - 删
composer.lock后再跑composer install --no-dev,才能让 Composer 重新从镜像拉元数据并生成新 dist URL - 如果项目用了私有包或自定义
repositories,需确认这些源本身是否支持dist分发(否则 fallback 到source,更慢)
composer create-project 导出骨架巨慢的真正原因
这个命令分两阶段:第一阶段克隆 GitHub 模板仓库(如 laravel/laravel),第二阶段进目录执行 composer install。前者完全不读任何 Composer 镜像配置,纯靠 Git/GitHub API。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 卡在
Cloning laravel/laravel?这是 Git 协议或 GitHub API 限流,跟repo.packagist无关 - 加
--repository=https://mirrors.aliyun.com/composer/只影响第二阶段,对第一阶段无效 - 临时解法:提前设
GITHUB_TOKEN(composer config -g github-oauth.github.com xxx),避免 API 限流 - 更稳做法:先用
git clone手动拉模板,再进目录composer install --no-dev --prefer-dist
导出前必须验证的三个关键配置项
导出速度取决于镜像是否真正加载、并发是否启用、缓存是否干净。三者缺一不可,且顺序不能错。
- 运行
composer config -g repo.packagist,输出必须是完整 JSON:{"type":"composer","url":"https://mirrors.aliyun.com/composer/"};空、null或https://packagist.org都说明没生效 - 运行
composer config -g parallel-downloads,应输出数字(如8);Composer 2.2+ 才支持,旧版需先composer self-update - 必须执行
composer clear-cache—— 否则它会复用本地缓存的旧packages.json,根本不会发请求到镜像站
项目级导出加速比全局更可靠
CI/CD 或宝塔等环境常以不同用户身份运行命令,全局配置(~/.composer/config.json)极易失效。项目级配置写进 composer.json,可提交、可复现、不依赖执行上下文。
- 进项目根目录,执行:
composer config repo.packagist composer https://mirrors.aliyun.com/composer/(注意不加-g) - 该命令会自动在
composer.json的repositories字段中安全追加,不覆盖已有私有源 - 若
composer.json中"repositories": []是数组格式,命令会报错;应先手动改为"repositories": {}(空对象) - 改完立刻删
vendor/和composer.lock,再跑composer install --no-dev --prefer-dist
导出环节最易被忽略的是锁文件与缓存的强耦合——哪怕镜像 URL 正确、并发开足,只要 composer.lock 里还存着上个月的 GitHub dist 地址,就永远快不起来。










