composer install仅还原composer.lock中锁定的版本,不解析composer.json新约束;依赖迁移必须用composer update或composer require来更新lock并安装新版本。

迁移必须触发 composer update 或 require,否则 composer.lock 不更新,环境就不可复现。
composer install 不能用于依赖迁移
它只读 composer.lock,装里面写死的版本,完全不解析新约束。哪怕你改了 composer.json 里的 require,只要没运行 composer update 或 composer require,vendor/ 就不会变,自动加载也不会映射新类。
- 典型错误:手动把
"monolog/monolog": "3.0.0"写进composer.json,然后直接跑composer install—— 结果vendor/monolog/monolog还是旧版,class_exists('Monolog\Logger')可能返回false - 正确路径只有两条:
composer update monolog/monolog(精准更新),或composer require monolog/monolog:^3.0(声明+安装+锁) -
composer install只该用在 CI/CD 部署、新机器拉代码后这些“还原已知状态”的场景
用 --with-dependencies 和 --dry-run 控制升级范围
盲目 composer update 会重算整个依赖图,极易引入意外变更(比如某包 v2.3.0 有 BC break,而 lock 原本是 v2.2.7)。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 只更新目标包及其直系子依赖:
composer update vendor/package --with-dependencies - 想预览但不执行?加
--dry-run(Composer 2.5+ 支持):composer update laravel/framework --with-dependencies --dry-run - 同时更新多个关键包:
composer update laravel/framework doctrine/orm symfony/console - 降级不是写死版本号,而是先改
composer.json的require字段,再composer update vendor/package --with-dependencies
迁移前必须验证 PHP 和扩展兼容性
很多“更新失败”根本不是版本冲突,而是目标包根本不支持当前环境。
- 查目标包最低 PHP 要求:
composer show vendor/package | grep requires.php,注意^8.3不等于8.3.0,得看实际运行的php -v - 检查必需扩展是否启用:
php -m | grep -E 'mbstring|openssl|curl|json|gd',缺ext-gd会导致包静默跳过,后续报Class not found - 迁移后立刻验证自动加载:
php -r "require 'vendor/autoload.php'; var_dump(class_exists('Vendor\Package\Client'));",比跑全量测试快得多
真正容易被忽略的是 autoload 配置本身——哪怕 composer update 成功,如果包里 composer.json 的 autoload.psr-4 路径错了一级,或者用了 classmap 但文件没在扫描路径下,class_exists() 依然会返回 false。










