必须用composer require而非手动改composer.json,因其是原子操作:自动更新require字段、刷新composer.lock、下载安装包、重生成autoload.php,四步缺一不可,避免漏步骤、错版本或破坏锁文件。

直接用 composer require,别手改 composer.json 后再 composer install 或 composer update —— 后者容易漏步骤、错版本、破锁文件,线上出问题就是它。
为什么必须用 composer require 而不是手动改 composer.json
手动写完 composer.json 之后,composer install 不会读你新加的包(它只认 composer.lock),而 composer update vendor/package 又可能连带升级其他依赖,甚至把整个依赖树重算一遍。只有 composer require 是原子操作:自动写入 composer.json、更新 composer.lock、下载安装包、刷新 autoload —— 四步缺一不可,失败就中止,不会留半残状态。
- 执行前确保在项目根目录(有
composer.json的那层) - 不加版本号时默认用
^约束(如^2.10),兼容小版本升级但不跨主版本 - 想装开发依赖?加
--dev:例如composer require --dev phpunit/phpunit:^10 - 本地 PHP 版本低于包要求(比如包要
php ^8.1,你本地是 8.0)?临时跳过检查可用--ignore-platform-reqs,但上线前必须解决
composer require 报错 “Could not find package” 怎么办
这不是网络问题,90% 是拼写或源配置问题。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 包名大小写敏感:
illuminate/cache对,illuminate-cache(短横线)错 - 国内镜像(如阿里云)默认不代理私有包或新发布包,可临时切回官方源:
composer require vendor/package -d composer.repo.packagist.org - 不确定包是否存在?先查真实版本:
composer show vendor/package --all - 被其他依赖拦住了?用
composer why-not vendor/package:version看谁在冲突
装完了类还是找不到?autoload 没生效
composer require 不会自动触发 autoload 重生成 —— 即使 vendor/autoload.php 已存在,新包的命名空间也不会被识别。
- 绝大多数情况:运行
composer dump-autoload就行 - 如果包本身没声明
autoload(比如纯函数库),需手动在你项目的composer.json里加"files"或"psr-4"映射,再跑一次dump-autoload - 某些老包用的是
classmap,且没配自动扫描,就得显式指定目录:composer dump-autoload --classmap-authoritative - CI/CD 部署时务必确认:构建机上执行的是
composer install --no-dev,且用的是最新提交的composer.lock
生产环境部署必须盯住 composer.lock
这个文件不是缓存,是依赖锁定的核心证据。本地 composer require 后,它一定得跟着 composer.json 一起提交到 Git。否则:
- 协作者
composer install装的不是你测过的版本 - CI/CD 流水线用旧
lock文件部署,可能跑着一个根本没在本地验证过的依赖组合 - 线上报
Class not found,第一反应不该是 autoload,而是先git diff composer.lock
最常被忽略的点:require 命令执行后,composer.lock 是否真更新了?别只看 vendor/ 目录有没有文件 —— 它可能只是从缓存硬链过来的。

















