镜像源配置和本地缓存是两件事,换阿里云或腾讯云镜像仅加速远程包拉取,不解决本地反复下载问题;需确认缓存路径可写、权限正确、未被--no-cache或环境变量绕过,并通过composer install -v日志验证“downloading from cache”是否生效。

镜像源配置和本地缓存是两件事,别混用
换阿里云或腾讯云镜像 repo.packagist 只能加速远程包拉取,它不解决本地反复下载问题。你改了镜像但 composer install 还卡在下载 vendor/,大概率是本地缓存根本没启用,或者被 --no-cache、权限错误、路径不可写等条件绕过了。
确认缓存是否真在用:composer config --global cache-dir 查路径,再手动 ls -l 看目录是否存在、当前用户是否有读写权限(Linux/macOS 还要 x 权限才能进入目录);更可靠的是跑一次 composer install -v,日志里出现 Downloading xxx.zip from cache 才算生效。
- Windows 用户改完全局配置必须重开终端,否则环境变量没刷新,
composer config -g repo.packagist查不到新值 -
cache-dir被设成/dev/null或只读路径,缓存会静默失效 - 项目根目录
composer.json里写了"repositories": []或残留镜像配置,会直接屏蔽全局设置 - CI 脚本里硬编码了
--no-cache,缓存就形同虚设
缓存路径必须可写且稳定,环境变量优先级最高
别依赖 composer config --global cache-dir 写配置文件的方式——它容易被覆盖或忽略。最稳的方案是设 COMPOSER_CACHE_DIR 环境变量,它优先级高于所有配置,尤其适合 Docker 和 CI。
Linux/macOS:export COMPOSER_CACHE_DIR="/mnt/ssd/composer-cache"(加到 ~/.zshrc 并 source);Docker:ENV COMPOSER_CACHE_DIR=/cache + VOLUME ["/cache"] 或 -v $(pwd)/cache:/cache;Windows PowerShell:$env:COMPOSER_CACHE_DIR="D:\composer-cache"。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 路径里不能带英文双引号,
COMPOSER_CACHE_DIR="/path/with space"是错的 - 如果用了 NFS、Docker volume 或受限磁盘,内核可能拒绝写入,错误藏在
-v日志里:file_put_contents(): failed to open stream: Permission denied - 临时换路径(如 CI 中)可用
composer config --global cache-dir /tmp/composer-cache,但注意/tmp可能被定时清理
缓存过期时间分三类,改错地方完全无效
cache-ttl、cache-files-ttl、cache-vcs-ttl 各管一摊,不能互相替代:
-
cache-ttl(默认 600 秒):只控制packages.json元数据缓存,影响「是否重新请求版本列表」,不影响 ZIP 包复用 -
cache-files-ttl(默认 15552000 秒,即 6 个月):真正管 ZIP/TAR 包要不要重下,发版后装旧代码,八成是它没调对 -
cache-vcs-ttl(默认 900 秒):专管 Git 克隆缓存,私有仓库走git@地址时才生效
改完记得验证:composer config --list | grep cache- 看值,但更关键的是跑 composer update -v 观察日志里 Fetching 是否变少;想立刻生效还得配 composer clear-cache,否则旧缓存还在。
Docker 构建中缓存不持久?BuildKit 的 --mount=type=cache 是唯一解
Docker 默认每层都是干净容器,~/.composer/cache 根本不跨构建复用。硬塞宿主机缓存进镜像会破坏可重现性,真正可行的只有 BuildKit 的 cache mount,但它不是开关一开就灵,得满足三个硬条件:
- 必须启用 BuildKit:
DOCKER_BUILDKIT=1 docker build .或export DOCKER_BUILDKIT=1 -
RUN --mount=type=cache,id=composer,target=/root/.composer/cache中的target必须和composer config cache-dir输出的真实路径一致(别假设是/root/.composer/cache) -
id=composer要全局唯一,且 CI runner 需共享 cache 存储后端(如buildkitd的--oci-worker-gc配置),否则不同 job 间也无效
注意:--mount=type=cache 只加速包下载,不传 vendor/ 目录;vendor 复用靠的是 Docker 层缓存本身,所以 COPY composer.json . 必须在 RUN composer install 之前,且不能 COPY . . 污染层。










