必须确认脚本运行用户,因composer config -g仅写入当前用户配置,CI/CD或宝塔中若用户不一致(如www、runner)则配置失效;同时需严格满足三要素:键名repo.packagist、type值composer、URL以/结尾,缺一即静默回退官方源。

脚本里执行composer config -g前必须确认运行用户
CI/CD 或宝塔部署脚本里直接写composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/,大概率白配——因为-g会把配置写进当前用户的~/.composer/config.json,而脚本实际运行用户(如www、runner、deploy)和你本地终端用户往往不一致。
常见错误现象:composer config -g repo.packagist返回正常 JSON,但composer install日志里仍出现GET https://packagist.org/p2/...。
- 在 Dockerfile 中,用
USER www切换用户后,再执行composer config -g - GitLab CI 里,在
before_script中加sudo -u runner composer config -g ... - 宝塔部署钩子脚本中,显式指定
HOME=/home/www composer config -g ...,避免读错~ - 验证方式:在脚本同一上下文中执行
composer config -g repo.packagist,输出必须是完整 JSON 对象,且whoami和echo $HOME要与预期一致
composer config -g命令漏掉三个关键点就静默失效
这条命令不是“差不多就行”,少一个要素,Composer 2.2+ 就会静默 fallback 回 https://packagist.org,且不报错、不提示。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
-
repo.packagist不能写成repos.packagist(多一个s就完全无效) -
composer是必填的type值,不是可选参数,也不能省略或替换成其他字符串 - URL 必须以
/结尾:https://mirrors.aliyun.com/composer/✅,https://mirrors.aliyun.com/composer❌(少斜杠会导致路径拼接出错,返回 404) - 必须带
-g,否则只改当前目录下的composer.json,对后续项目无影响
CI 缓存 key 必须包含镜像标识,否则缓存污染
GitHub Actions 或 GitLab CI 中复用 ~/.composer/cache 目录时,不同镜像源生成的元数据快照(如 p2/monolog/monolog.json)不兼容。混用会导致 corrupted cache file 或 Package not found。
- 缓存 key 示例:
composer-${{ hashFiles('**/composer.lock') }}-aliyun,其中-aliyun不可省略 - 不要用
composer-${{ runner.os }}这类泛化 key,它无法区分镜像源变更 - 首次启用新镜像时,务必清空旧缓存;或在 workflow 中加一步
composer clear-cache(仅限调试阶段) - 验证缓存是否生效:看日志里是否出现
Loading from cache,且后续请求 URL 是镜像域名而非packagist.org
安装后加 --no-dev --prefer-dist --optimize-autoloader才算真提速
换镜像只解决元数据拉取和 ZIP 包下载慢的问题,composer install 卡在 “Resolving dependencies” 或 “Generating autoload files” 阶段,和镜像无关。
-
--no-dev:跳过require-dev,省掉 30–60% 时间,生产环境必须加 -
--prefer-dist:强制走 ZIP 包而非git clone,避免 I/O 和网络开销 -
--optimize-autoloader(或-o):生成静态类映射,PHP 7.4+ 下可进 opcache -
--classmap-authoritative(或-a):仅限部署用,告诉 autoloader “没在映射里 = 真没有”,跳过文件扫描;本地开发禁用,否则新增类直接Class not found
容易被忽略的是:这些参数必须和镜像配置配合使用,且要在脚本中显式写出——只换源不加参数,速度提升有限;只加参数不换源,依然卡在元数据加载环节。

















