composer install 严格按 composer.lock 安装,不解析依赖、不升级版本;composer update 忽略锁文件,重解依赖并更新锁文件——这是二者根本区别。

composer install 严格按 composer.lock 安装,不改版本、不重算依赖;composer update 忽略 composer.lock,重解依赖、升级版本、强制更新锁文件——两者根本区别就在这里。
为什么 composer install 在 CI/CD 和生产环境必须用
它跳过依赖解析,直接按 composer.lock 中记录的完整哈希、版本号、源地址批量下载解压,速度快、结果可预测。如果 composer.lock 已提交到 Git,所有环境(开发机、测试机、线上服务器)安装出来的 vendor/ 内容完全一致。
- 没
composer.lock时,install会退化为首次解析composer.json并生成新锁文件——这仅应发生在项目初始化阶段 - 加
--no-dev是常规操作,它只影响是否安装require-dev下的包,不影响核心行为 - 若线上机器误跑
update,可能因网络超时、平台约束(如config.platform.php不匹配)或新版本 BC break 导致部署失败
composer update 什么时候才该运行
它本质是“重新开处方”:联网查最新可用版本,跑 SAT 求解器找满足全部约束(^2.1、dev-main、PHP 版本等)的最新组合,再下载、安装、写入新 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,避免全量重算;加--with-dependencies控制子依赖是否联动 - 安全补丁落地前,先跑
composer update --dry-run看清会动哪些包、升到什么版本 - PHP 升级后执行
update失败?大概率是config.platform.php还锁在旧版,需先改配置再试
composer.lock 不提交到 Git 就等于放弃一致性
它是 Composer 实现可重现构建的唯一凭证。Git 忽略它,等于让每个 composer install 都变成一次随机快照——今天装的是 monolog/monolog v2.10.0,明天可能是 v2.11.1,哪怕 composer.json 里写的仍是 ^2.10。
- 团队新人克隆项目后第一件事就是
composer install,前提是composer.lock已存在且已提交 -
composer update后必须立刻git add composer.lock && git commit,否则别人install时拉的还是旧版本 - CI 流水线里若发现
composer.lock被修改但未提交,应直接报错阻断,而不是自动commit
最易被忽略的点:很多人以为 install 会“检查并自动同步到最新”,其实它从不检查远程——只要 composer.lock 存在,它就无条件信任并执行。依赖是否“过期”,只能靠人主动 update 并验证。

















