生产环境必须用 composer install --no-dev --optimize-autoloader --classmap-authoritative,换镜像源不加速自动加载;dump-autoload -o 不生成 classmap 文件,仅刷新 autoload_static.php,完整 classmap 仅在 install/update 阶段构建且需三参数协同生效。

生产环境必须用 composer install --no-dev --optimize-autoloader --classmap-authoritative
换镜像源本身不加速自动加载,composer install 加这三个参数才是生产部署的硬性组合。只配阿里云镜像、只跑 composer dump-autoload -o 或只在 composer.json 里写 "optimize-autoloader": true,都不等于真正启用了 classmap 权威加载。
原因很直接:dump-autoload -o 不重建 vendor/composer/autoload_classmap.php,它只刷新轻量级的 autoload_static.php;而真正的 classmap 文件只在 install 或 update 阶段扫描生成,且必须配合 --classmap-authoritative 才会启用“类不在 map 里就直接报错”的加载策略。
-
--no-dev:避免把require-dev中的测试类、Mock 类扫进 classmap,污染映射表 -
--optimize-autoloader:触发完整 autoload classmap 构建流程(含 PSR-4、classmap、files 等所有启用的 autoload 类型) -
--classmap-authoritative:关闭 fallback 路径查找,省掉大量file_exists()和目录遍历,但要求 classmap 必须完整 —— 新增类后必须重装 vendor,不能靠dump-autoload补救
执行完检查 vendor/composer/autoload_classmap.php:文件存在、大小 >100KB、内容包含你项目里绝大多数类名,才算生效。否则就是白配。
composer config -g repo.packagist 在生产机上基本无效
你在终端里配好了全局镜像,composer config -g repo.packagist 输出也对,但 PHP-FPM 或 Web 服务进程(如 www-data、nginx)运行时根本读不到这个配置 —— 因为 -g 写的是当前用户的 ~/.composer/config.json,而 Web 进程没权限读你的家目录。
真正能覆盖所有用户、所有执行上下文的方式只有两种:
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 写系统级配置:
/etc/composer/config.json,且必须满足:目录存在且权限 755、文件路径严格为/etc/composer/config.json、"repositories"是对象而非数组、键名是"packagist.org"、URL 末尾带/ - 写项目级配置:进项目根目录后运行
composer config repo.packagist composer https://mirrors.aliyun.com/composer/(去掉-g),它会安全追加到composer.json的repositories字段,且优先级高于全局
CI/CD 流水线中更推荐后者 —— 把镜像声明固化在代码里,不依赖任何外部环境配置。
换镜像后仍卡在 “Resolving dependencies”?和镜像无关
镜像源只影响包下载速度和元数据拉取,不参与依赖解析逻辑。“Resolving dependencies” 卡住,99% 是 Composer 在本地尝试穷举版本组合,常见于:
- 项目依赖树太深或约束太松(比如
"monolog/monolog": "^1.0 || ^2.0") - 锁文件(
composer.lock)已损坏或被手动编辑过 - PHP 版本与某些包的
require.php不匹配,Composer 反复试错
此时换镜像、清缓存、调并发数全无作用。解决方法只有两个:
- 删掉
composer.lock和vendor/,再跑composer install(不是update)让 Composer 重新计算依赖图 - 加
--with-all-dependencies或缩小版本范围(如改用"^2.10"而非"^2.0")来减少搜索空间
低配服务器部署必须清缓存 + 控并发 + 删旧文件
镜像配对了,但 composer install 还慢甚至失败,往往是因为旧缓存还在读 packagist.org 的索引,或者并发太高触发临时文件冲突。
- 先清缓存:
composer clear-cache - 设并发下载数:
composer config -g parallel-downloads 6(512MB 内存机器建议 6~8,别设 15+) - 内网可信环境可关 HTTPS 校验:
composer config -g secure-http false(仅限内网,生产对外服务禁用) - 必须删掉
vendor/和composer.lock,再跑composer install --prefer-dist --no-autoloader --no-scripts;完成后单独执行composer dump-autoload --optimize
最后一点最容易被忽略:用 install 而不是 update。因为 update 会沿用 composer.lock 里记录的 dist URL,哪怕你已经换镜像,它仍可能去请求海外地址。










