新项目必须用 composer install,因为它严格按 composer.lock 还原精确依赖版本,确保环境一致性;而 composer update 会忽略 lock 文件导致版本漂移、线上报错。

真正需要日常掌握的 Composer 命令只有 4 个:install、update、require、remove。其余命令属于特定场景备用,强行 memorize 反而容易混淆执行逻辑。
什么时候必须用 install,而不是 update
当项目已有 composer.lock 文件(比如从 Git 克隆下来、CI 构建、线上部署),就必须用 install —— 它只读 composer.lock,安装其中锁定的精确版本,保证环境一致性。
- 执行
composer update会忽略composer.lock,重新解析composer.json中的版本约束,可能导致本地和线上依赖版本不一致 -
install默认会装require和require-dev里的包;上线部署务必加--no-dev,否则可能引入测试工具、代码检查器等非生产依赖 - 如果
composer.lock不存在,install会退化为先做一次update再安装,这在 CI 中是危险信号——说明依赖未锁定
require 和 remove 才是修改依赖的正统方式
手动编辑 composer.json 后直接 install 或 update,极易导致 vendor/ 状态与锁文件不一致,甚至残留已删除包的文件。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
-
composer require guzzlehttp/guzzle:自动写入require、下载包、更新composer.lock、重生成 autoloader - 加
--dev参数(如composer require phpunit/phpunit --dev)会写入require-dev,且后续install --no-dev将跳过它 -
composer remove monolog/monolog:不只是删 JSON,还会检测依赖树,移除未被其他包引用的传递依赖(比如psr/log若只剩 monolog 引用,也会被一并清理) - 误删了
vendor/目录?别急着dump-autoload,它不恢复包;必须先install或update
update 的真实作用不是“升级”,而是“重新求解依赖图”
很多人以为 update 是为了把包升到最新版,其实它的核心任务是:根据当前 composer.json 的所有约束(包括 PHP 版本、扩展、平台配置),重新计算出一组满足全部条件的依赖版本组合。
- 执行
composer update vendor/package时,若该包有子依赖(如symfony/console依赖psr/container),默认不会更新子依赖 —— 这常导致运行时报Class not found;必须显式加--with-dependencies -
composer update --dry-run非常实用:不改任何文件,只输出“如果执行会装哪些版本”,适合在 PR 中预判影响 - CI 脚本里写
update要格外小心——它会改composer.lock,若没提交,下次install就会还原旧版本,造成行为漂移
镜像源和网络卡住时,先看哪两行输出
终端卡在 Loading composer repositories with package information 或 Updating dependencies,本质是两个不同阶段的问题:
- 前者卡住 = 仓库元数据拉取失败,大概率是镜像源不可达或配置错误;可临时切回官方源验证:
composer config --global repo.packagist composer https://repo.packagist.org - 后者卡住 = 依赖求解陷入组合爆炸,常见于
composer.json中混用了太宽泛的版本约束(如"*"或"dev-main")或冲突的 PHP 平台要求 - Composer 2+ 支持按需加载元数据,但如果你在
repositories里硬编码了大量私有 VCS 源,每条都会触发一次 Git clone 检查,拖慢整个流程
最易被忽略的点:团队协作中,composer.lock 必须提交进 Git;它的存在与否,直接决定 install 是精准复现,还是退化成不可控的 update。










