composer install卡住主因是默认行为未调优,非网络问题;必须配齐--no-dev、--prefer-dist、--no-autoloader、--no-scripts参数,否则易fallback至慢速source或触发冗余操作,导致耗时从30秒飙升至3分钟以上。

composer install 为什么总卡住?关键参数必须配齐
不是网络慢,是默认行为没调优。CI/CD 或本地首次安装慢,90% 源于没加这几个参数。
-
--no-dev:生产环境必须加,跳过require-dev下所有包(如phpunit/phpunit),否则 vendor 里塞满不该上线的工具 -
--prefer-dist:强制走压缩包(.zip/.tar.gz)而非 git clone,下载快、解压稳;不加时 Composer 可能 fallback 到 source 模式,尤其在镜像未命中时 -
--no-autoloader和--no-scripts:Docker 构建或 CI 中常用,跳过 autoload 生成和 post-install-cmd 脚本(如artisan key:generate),等容器启动后再单独运行 - 组合推荐:
composer install --no-dev --prefer-dist --no-autoloader --no-scripts
composer update 怎么避免“升完就崩”?限定范围比裸跑安全十倍
裸跑 composer update 等于把整个依赖树交给随机数生成器——子依赖版本漂移、PSR-4 映射失效、甚至 PHP 兼容性断裂都可能悄无声息发生。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 只升一个包:
composer update monolog/monolog,它只重算该包及其直系依赖,不会动其他分支 - 连带更新其依赖:
composer update monolog/monolog --with-dependencies,避免出现psr/log还卡在 v1.0 导致LoggerInterface找不到 - 跳过平台检查(仅临时调试):
composer update --ignore-platform-reqs,比如本地 PHP 8.3 但某包声明只支持 8.2;但别提交,CI 会直接拒绝 - 千万别写
composer update在部署脚本里——它改composer.lock,而你没 commit,下一个人install就拿到不一致的环境
composer require 的参数陷阱:加错一个,线上多加载 50MB
composer require 不是“下载命令”,是声明 + 安装 + 锁定三步原子操作。参数错,后果立现。
- 开发工具必须加
--dev:composer require phpstan/phpstan --dev,否则它进require字段,上线也会 autoload,白占内存 - 版本必须带约束符:
composer require guzzlehttp/guzzle:^7.5,写成7.5会被解释为严格等于7.5.0,Packagist 上基本不存在这个精确版本 - 只想改
composer.json不安装:composer require symfony/console --no-update,后续可单独composer update symfony/console控制节奏 - 手写
composer.json再install是高危路径:JSON 格式错一个逗号,Your requirements could not be resolved报错根本看不出哪行有问题
autoload 不生效?别查命名空间,先 dump
90% 的 Class not found 不是代码写错,是 autoloader 没刷新。Composer 不监听文件系统变化,改了配置就得手动重建映射。
- 新增 PSR-4 目录(如
app/Services/)或改了"App\": "src/"配置,必须跑:composer dump-autoload - 开发中频繁增删类,用
-o生成 classmap:composer dump-autoload -o,比默认 PSR-4 动态查找快不少 - 极致性能场景加
--classmap-authoritative:composer dump-autoload --optimize --classmap-authoritative,跳过文件存在性检查,但要求所有类都在映射里,漏一个就 fatal - 用了
"files"类型(如src/functions.php),改了那个文件也得dump-autoload,否则函数永远不加载
composer install 无 composer.lock 时的自动 fallback 行为——它悄悄执行 update 并生成新锁文件,表面成功,实则绕过团队版本共识。遇到这种情况,第一反应不是继续装,而是确认锁文件是否该由负责人统一生成并提交。










