确认镜像源是否真正生效需执行composer config -g repo.packagist,输出必须是完整json对象如{"type": "composer", "url": "https://mirrors.aliyun.com/composer/"},空、null、纯url或仍为https://packagist.org均说明未生效。

确认镜像源是否真正生效
执行 composer config -g repo.packagist,输出必须是完整 JSON 对象,例如 {"type": "composer", "url": "https://mirrors.aliyun.com/composer/"}。空、null、纯字符串 URL 或仍是 https://packagist.org,都说明没生效。
常见失效原因:
-
repos.packagist(多一个s)——字段名拼错,静默失败 - 旧版 Composer 1.x 不支持
repo.packagist,得用composer config -g repos.packagist '{"type":"composer","url":"..."}' - CI 脚本里用了
sudo composer config -g,写进了root的配置,但 runner 是普通用户,读不到 - URL 缺末尾斜杠(如
https://mirrors.tuna.tsinghua.edu.cn/composer→ 必须是https://mirrors.tuna.tsinghua.edu.cn/composer/)
验证是否真走镜像:加 -vvv 运行 composer install,日志中出现 GET https://mirrors.aliyun.com/composer/p2/... 才算成功。
缓存路径必须同时包含 vendor/ 和 ~/.composer/cache
只缓存 vendor/ 看似快,实则危险:不同 PHP 版本、扩展开关(如 ext-apcu)、文件系统大小写敏感性,会导致生成的 autoload 文件不兼容,上线后随机报 Class not found 或 Cannot declare class。
只缓存 ~/.composer/cache 也不够:它只存 dist 包,但安装时仍需解压、校验、写临时文件;若 vendor/ 没缓存,每次都要重建目录结构,耗时卡在最后一步。
必须双路径缓存:
-
vendor/:需排除vendor/bin/(符号链接,跨 runner 易指向错误)和vendor/autoload.php(生成类,不应固化) -
~/.composer/cache:建议显式设为$HOME/.composer-cache-$PHP_VERSION,避免多 PHP 版本混用
GitLab CI 示例:paths: - vendor/ - ~/.composer-cache-8.2;GitHub Actions 示例:path: | vendor ~/.composer/cache。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
CI 中 composer install 必须带的参数组合
漏掉任意一个,缓存就等于白配:
-
--no-dev:跳过require-dev,省掉 30%–60% 时间 -
--prefer-dist:优先用 tarball 而非 git clone;注意它不跳过元数据刷新,但比--prefer-source稳定得多 -
--optimize-autoloader(或-o):生成vendor/composer/autoload_classmap.php,把 PSR-4 映射转成静态数组 -
--classmap-authoritative(或-a):告诉自动加载器“映射里没有,那就真没有”,彻底跳过文件系统扫描 —— 仅限生产/CI,开发环境加了会导致新增类找不到 -
--no-interaction:避免交互阻塞,CI 必加
完整命令示例:composer install --no-dev --prefer-dist --optimize-autoloader --classmap-authoritative --no-interaction。
缓存 key 必须基于 composer.lock 哈希
缓存 key 若只依赖 PHP 版本或 OS,composer.lock 变了却仍复用旧缓存,会导致依赖不一致甚至运行时报错。
正确做法:
- GitHub Actions:
key: ${{ runner.os }}-php-${{ matrix.php }}-composer-${{ hashFiles('**/composer.lock') }} - GitLab CI:
key: files: [composer.lock]或key: "$CI_JOB_NAME-composer-${CI_COMMIT_SHA:0:8}"
务必确保 composer.lock 提交到仓库;本地生成新 lock 但未提交,是缓存失效最常见原因。
项目级镜像配置比全局更稳:在项目根目录运行 composer config repo.packagist composer https://mirrors.tuna.tsinghua.edu.cn/composer/,它会安全追加到 composer.json 的 repositories 字段(注意先确保该字段是对象而非空数组),配置随代码走,所有人行为一致。










