GitHub Actions 中 composer install 失败主因是 PHP 版本不匹配,需用 setup-php 显式指定版本并启用所需扩展;应缓存 ~/.composer/cache 而非 vendor/;必加 --no-interaction --prefer-dist --optimize-autoloader 参数;私有包需正确注入 token 到 auth.json。

GitHub Actions 里 composer install 总失败?先确认 PHP 版本对不对
CI 中 Composer 报错,八成不是 composer.json 有问题,而是运行环境的 PHP 版本不匹配。比如你本地用 PHP 8.2 开发,但 GitHub Actions 默认用的是 Ubuntu 上的系统 PHP(可能是 8.1 或更低),而 composer.json 里写了 "php": "^8.2",composer install 就直接退出,连缓存都来不及用。
- 用
setup-php动作显式指定 PHP 版本,别依赖系统默认值 - PHP 版本必须和
composer.json中require.php字段兼容,否则composer install会因平台约束失败 - 如果项目用了
ext-sodium或ext-pdo_pgsql等扩展,记得在setup-php的extensions参数里一并启用
缓存 vendor/ 目录不如缓存 Composer 的 ~/.composer/cache
很多人直接用 actions/cache 缓存整个 vendor/,看起来快,实则隐患多:不同 PHP 版本、不同扩展状态、甚至不同 Composer 版本生成的 vendor/ 是不兼容的;一旦缓存污染,CI 会静默跑通但运行时报错,极难排查。
- 官方推荐做法是缓存 Composer 自身的下载缓存目录:
~/.composer/cache - 缓存 key 应包含 PHP 版本、Composer 版本、
composer.lock的 hash(而不是composer.json) - 示例 key:
composer-${{ hashFiles('**/composer.lock') }}-${{ matrix.php-version }}-${{ hashFiles('~/.composer/composer.json') }}
composer install --no-interaction --prefer-dist --optimize-autoloader 这几个参数不能少
CI 环境没有交互终端,也不需要开发时的源码调试能力,缺了这些 flag 容易触发意外行为或拖慢构建。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
-
--no-interaction:避免卡在 prompt(比如问是否信任仓库),CI 会超时失败 -
--prefer-dist:优先用 zip 包而非 git clone,下载更快、更稳定;尤其在 GitHub Actions 的网络环境下效果明显 -
--optimize-autoloader:生成优化后的autoload_classmap.php,提升后续测试/运行阶段的类加载性能 - 别加
--dev——除非你真要跑 PHPUnit 或 PHPCS,否则它会装一堆不需要的包,增加失败概率和缓存体积
私有包(如 GitHub Packages、GitLab 或自建 Satis)认证容易漏配
本地能装,CI 报 Could not fetch https://.../package.zip 或 401 Unauthorized?大概率是没把 token 注入到 Composer 的 auth 配置里。
立即学习“PHP免费学习笔记(深入)”;
- GitHub Packages 场景下,用
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}注入,并在setup-php步骤中通过composer-auth参数自动写入auth.json - GitLab 或其他私仓,需提前用
composer config命令生成auth.json并用actions/upload-artifact或环境变量方式注入,注意不要硬编码 token - 验证是否生效:在
composer install前加一步composer config --global --list | grep github,看 auth 是否已载入


















