离线安装必须配置cache-files-dir而非cache-dir,因只有files/子目录下的ZIP包被--prefer-dist读取解压;需先unset cache-dir、显式设cache-files-dir为可写绝对路径,并配合COMPOSER_DISABLE_NETWORK=1及--prefer-dist等参数。

cache-files-dir 是离线缓存唯一该配的路径
Composer 的 cache-dir 本身不等于离线能力——它混存元数据、归档包、解压副本,但只有 files/ 子目录下的 vendor/package/version.zip 文件,才是 --prefer-dist 安装时真正读取并解压的实体。其他子目录(如 repo/)在断网后直接失效。
所以别再复制整个 ~/.composer/cache 到内网了。你要的不是“缓存”,是可迁移、可复用的最小离线单元:只导出 files/,只配置 cache-files-dir。
-
cache-files-dir优先级高于默认值,但低于已设的cache-dir;冲突时建议先composer config --global --unset cache-dir - 路径必须显式指向一个真实存在的、可写的目录,比如
/opt/composer-offline-cache - 联网机上执行
composer config --global cache-files-dir /path/to/files后,再跑composer install --prefer-dist,才能确保所有 dist 包落进该目录 - 检查是否生效:进入目标路径,看是否有类似
monolog/monolog/2.10.0.0/monolog-monolog-6a8c4b5.zip的嵌套结构
镜像源配错一个字符,就等于没换
阿里云镜像是目前最稳的全量同步源,但 composer config -g repo.packagist 命令写错任意一处,都会静默 fallback 到 packagist.org,你完全感知不到——composer install 还卡在 Downloading,composer diagnose 却显示 “Repo packagist.org is default”。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 必须带
-g,否则只改当前项目,对create-project或全局命令无效 - key 是
repo.packagist,不是repos.packagist(多一个s就失效) -
type必须显式写composer:composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/ - URL 必须以
/结尾,少斜杠会导致 404 或空响应,部分 Composer 2.2+ 版本直接回退 - 验证是否生效:
composer config -g repo.packagist输出应为完整 JSON 对象,且composer show packagist/support -vvv日志中出现GET https://mirrors.aliyun.com/composer/
CI 中只缓存 vendor/ 是白忙活
CI 流水线里只缓存 vendor/ 目录,不缓存 ~/.composer/cache/,相当于只存了“结果”却丢了“原材料”——下次 install 仍要重新下载 zip 包;反之只缓存 cache 而不缓存 vendor,则每次都要解压重建,白费缓存。
- GitHub Actions 示例:
cache: paths: [vendor/, ~/.composer/cache/](注意路径格式,不能漏掉波浪号) - GitLab CI:用
cache: key: $CI_COMMIT_REF_SLUG并明确列出两个路径 - 宝塔或 Jenkins 环境中,确认执行命令的用户是
www或jenkins,不是你登录 shell 的用户——composer config -g要用对应用户身份运行 - 缓存键必须精准:建议用
composer.lock的 SHA256,而非固定字符串,避免 lock 更新后缓存污染
生产构建必加的四个参数
composer install 在 CI 或线上部署中漏掉任意一个参数,都可能让安装时间多花 30%–60%。这不是可选项,是生产环境的硬性要求。
-
--no-dev:跳过require-dev下所有包(如phpunit),也防止测试类污染autoload_classmap.php -
--prefer-dist:强制走 ZIP 包而非 Git 克隆,避开 SSH 认证、分支切换等开销 -
--optimize-autoloader(或-o):生成vendor/composer/autoload_classmap.php,把 PSR-4 映射转成静态数组 -
--classmap-authoritative(或-a):告诉自动加载器“映射里没有,那就真没有”,彻底跳过文件系统扫描
组合使用才是黄金标准:composer install --no-dev --prefer-dist --optimize-autoloader --classmap-authoritative。开发环境绝对不要加 -a,否则新增类后 class_exists() 会返回 false。


















