必须用composer install——新环境部署、ci/cd或上线时严格按composer.lock安装精确版本;仅当明确升级某包(如composer update guzzlehttp/guzzle)才用update,避免全量更新引发兼容问题。

该用 composer install 还是 composer update,取决于你当前要解决的问题:新环境部署、CI/CD 构建必须用 composer install;只有明确要升级某个包版本时才用 composer update,且优先指定包名,避免全量更新引发兼容问题。
新项目拉取或生产部署时,必须运行 composer install
它只读 composer.lock 文件,安装其中记录的**精确版本号**,不解析 composer.json 的版本约束。这是保证团队成员、测试机、线上服务器装的完全一致的唯一方式。
- 如果项目根目录下没有
composer.lock,composer install会报错并拒绝执行——这不是 bug,是保护机制 - Git 提交时必须包含
composer.lock,否则协作和部署必然出错 - 生产环境部署脚本里,应固定使用
composer install --no-dev --optimize-autoloader,跳过开发依赖并生成高效自动加载映射
添加新依赖,用 composer require 而非手动改 composer.json
手动编辑 composer.json 后直接 composer install 极易因逗号遗漏、引号不闭合、版本写法错误(如把 ^2.0 写成 2.0.*)导致解析失败。而 composer require 会自动校验语法、写入 JSON、更新 composer.lock 并下载包。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 运行
composer require monolog/monolog:^3.0,它会把条目加进require段;加--dev则进require-dev - 若提示
Root composer.json requires ... but it is not satisfiable,不是网络问题,是依赖冲突——已有包和你想加的包在版本约束上无法共存 - 加完后检查
composer.lock是否更新了 hash 值,没变说明根本没写入成功
只更新单个包,别碰全量 composer update
composer update 会忽略 composer.lock,重新解析整个依赖图,按 composer.json 中的宽松约束(如 ^7.5)装最新小版本。Laravel 项目上线后报错,80% 是因为误用了这个命令,比如把 guzzlehttp/guzzle 从 7.5.1 升到 7.6.0,结果后者引入了 BC break。
- 真要升级某包,用
composer update guzzlehttp/guzzle,它只动这个包及其直系子依赖 - 想让
composer.lock同步composer.json的元信息(比如改了 description),但不升级任何包,就跑composer update nothing或composer update --lock - CI 流水线中绝对禁止无参数的
composer update,它不可控、不可复现
自动加载失效?先查 vendor/autoload.php 和 PSR-4 配置
类找不到(Class 'AppHttpControllersController' not found)不一定是 Composer 没装好,更可能是自动加载没配对。
- 入口文件(如
index.php或artisan)第一行必须有require __DIR__.'/vendor/autoload.php';,漏掉这句,啥都白装 - 你自己写的代码要被自动加载,得在
composer.json里声明 PSR-4 映射,例如:"autoload": {"psr-4": {"App\": "app/"}},然后运行composer dump-autoload -o生产优化版映射 - Laravel 包没注册服务提供者?检查根
composer.json的extra.laravel.dont-discover是否写了"*",写了就等于关掉了所有包的自动发现
最常被忽略的一点:很多人以为 composer install 成功 = 万事大吉,但实际运行时出错,往往是因为没确认 vendor/autoload.php 是否被正确引入,或者 composer.lock 没提交、被 .gitignore 忽略了——这两处一错,环境一致性就彻底崩了。










