composer install 比 update 慢是因为缺失或损坏 composer.lock 时退化为依赖解析,等同于 update;正确做法是确保锁文件存在、配置镜像并清缓存、使用 --no-dev 等参数优化。

composer install 为什么比 update 还慢?
这不是错觉,而是锁文件缺失或损坏导致的退化行为。当 composer.lock 不存在、被删、或 composer.json 被修改但没运行 update,Composer 就会放弃“按锁安装”的快捷路径,转而重跑依赖解析——这和 update 一样耗时,甚至更慢(因无缓存上下文)。
-
install的本意是读composer.lock,装里面记录的确切版本,毫秒级完成 -
update必须重算整个依赖树,CPU 密集型操作,尤其在约束宽泛(如"*")或启用Xdebug时,可能卡在Resolving dependencies几分钟 - 首次
install若无锁文件,它会自动 fallback 成update并生成锁——建议初始化后立即git add composer.lock,别等 CI 报错才补
镜像配置写错,90% 时间花在无效回退上
改了镜像却还是走 packagist.org,不是网络问题,是配置未命中 Composer 2.2+ 的硬编码规则。官方源无法被简单覆盖,必须显式切断回退路径。
- 全局镜像必须用:
composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/—— 键名不能多s(repos.packagist❌),URL 必须 HTTPS 且末尾带/ - 项目级镜像需在
composer.json中写"repositories"数组,首项必须是{"packagist.org": false},第二项起才是镜像 URL;写成对象或合并进同一项均无效 - 改完配置后,必须执行
composer clear-cache,否则旧缓存仍指向官方源,提速效果归零
CI/CD 构建里漏加这几个参数,耗时翻倍
默认行为不为生产环境设计,不调优就跑 install,30 秒变 3 分钟很常见。关键不是网络,是避免冗余操作。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
-
--no-dev:跳过require-dev下所有包(如phpunit/phpunit),防止测试工具污染线上 autoload -
--prefer-dist:强制下载 ZIP 包而非 Git clone,避开 SSH 认证、分支切换、稀疏检出等开销 -
--no-autoloader和--no-scripts:Docker 构建常用,跳过dump-autoload和post-install-cmd(如artisan key:generate),等容器启动后再单独执行 - 组合命令示例:
composer install --no-dev --prefer-dist --no-autoloader --no-scripts
autoload 不生效?别猜路径,先 dump
Composer 不监听文件系统变化,改了 autoload 配置、新增 PSR-4 目录、甚至改了 files 类型的函数文件,都不会自动刷新映射。报 Class not found 时,90% 是忘了这一步。
- 每次修改
composer.json中的autoload字段后,必须手动运行composer dump-autoload - 开发中频繁增删类,可用
-o生成 classmap:composer dump-autoload -o,比 PSR-4 动态查找快,但要求命名空间与路径严格匹配 - 若用了
"files"加载全局函数(如src/functions.php),改了那个文件也得重dump,否则新函数不可用
最常被忽略的点是:锁文件内容包含的是 dist URL(比如 https://api.github.com/.../zipball/),它是在旧镜像配置下生成的。换镜像后不删 vendor 和 composer.lock 再 install,根本不会走新地址——它只照着锁里写的 URL 去下载。

















