composer install 用于复现依赖,只安装 composer.lock 中的确切版本,适用于 ci/cd、生产部署和团队协作;composer update 用于探索新版本,重算依赖树并更新 lock 文件,仅限本地调试或框架升级。

别把 composer install 和 composer update 当成“快慢选择”,它们解决的是完全不同的问题:一个是复现,一个是探索。
什么时候必须用 composer install?
CI/CD 流水线、生产环境部署、团队协作拉代码后首次安装——这些场景下,composer install 是唯一安全选项。它只读 composer.lock,装里面记录的**确切版本号**,不计算、不试探、不改锁文件。
- 若项目根目录没有
composer.lock,install会自动 fallback 到update行为,等于绕过团队共识——建议提前git commit一个空锁文件,或由负责人统一生成并提交 - 线上脚本里出现
composer update,等于把版本控制权交给了网络延迟、镜像同步状态和 packagist 的临时不可用 - 执行前可加
--no-dev(跳过require-dev区依赖),但注意:某些测试工具(如phpunit)若被误删,会导致composer dump-autoload失败
什么时候才该用 composer update?
本地调试兼容性、升级主框架(如 Laravel 10 → 11)、验证某个包是否修复了已知 bug——这些才是 update 的合理用途。它会重算整个依赖树,修改 composer.lock,并可能连带升级一堆间接依赖。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 想只更新单个包?直接
composer update vendor/package-name,不会动其他依赖(前提是约束符没写死) - 编辑了
composer.json但只是改了 description 或 author,没动依赖,却收到 “lock file is not up to date” 警告?运行composer update --lock(Composer 2.2+)即可仅刷新锁文件哈希,不升级任何包 - 遇到
Your requirements could not be resolved,先检查 PHP 版本和扩展(如ext-gd),再考虑加--ignore-platform-reqs临时绕过——但绝不能提交到 git,CI 环境默认禁用该参数
composer require 的参数陷阱
require 不是“加一行 JSON”那么简单,参数选错,后续 CI 就会报错、autoload 找不到类、甚至上线加载开发工具。
- 测试/IDE 辅助类库(如
phpunit/phpunit、barryvdh/laravel-ide-helper)必须加--dev,否则进require区,生产环境也会被自动加载 - 指定版本别只写
7.5,要带约束符:^7.5(推荐)表示 >=7.5.0 且 ~7.5.0 表示 >=7.5.0 且 7.5 会被解释为严格等于7.5.0,基本匹配不到 - 只想写进
composer.json但暂不安装?加--no-update,之后再单独composer update vendor/package更可控
autoload 不生效?先跑这句
新增 PSR-4 目录、改了 "autoload": {"psr-4": {...}}、甚至加了 "files" 全局函数文件——Composer 都不会自动感知。所有这些变更,都必须手动触发:
composer dump-autoload
- 开发中频繁增删类?加
-o生成 classmap:composer dump-autoload -o,比默认 PSR-4 查找快不少(尤其在大量小文件时) - 如果用了
classmap或files映射,dump-autoload必须每次手动跑,它不监听文件系统变化 - 报
Class not found时,90% 不是命名空间或路径写错,而是忘了这一步——别急着查vendor/autoload.php是否引入,先确认 autoloader 是否已刷新










