必须用 composer.install,它严格按 composer.lock 精确还原依赖,确保环境一致;composer.update 会重解析 composer.json 并升级版本,易引发兼容问题。

必须用 composer.json 声明依赖,靠 composer.lock 锁定版本,否则不同环境装出来的包不一致——这是唯一能守住“可重复构建”的底线。
composer install 和 composer update 的行为差异必须分清
这两个命令根本不是“安装”和“升级”的简单对应:
-
composer install只读composer.lock,不管composer.json里写的约束是什么,它就照着 lock 文件里记录的精确版本装——这是 CI/CD、线上部署唯一该用的命令 -
composer update会重新解析composer.json中所有约束(比如"^4.12"),找满足条件的最新可用版本,再更新composer.lock——全量执行极易引入隐性兼容问题 - 真要升级某个包,用
composer update vendor/package-name限定范围;加--with-dependencies才会连带更新其子依赖,不加则只升目标包本身
autoload 配置写错会导致类根本加载不了
PSR-4 自动加载不是“写了就自动生效”,常见失效原因有三个:
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
-
composer.json里"autoload": {"psr-4": {"App\": "src/"}}的命名空间末尾必须带双反斜杠\,写成"App"或"App"都会失败 - 目录路径
"src/"是相对于composer.json所在位置的,不能写成./src/或绝对路径 - 改完 autoload 后必须运行
composer dump-autoload -o,否则优化后的类映射不会生成,开发时可能暂时不报错,但生产环境启用了 opcache 就直接Class not found
私有包和国内镜像配置是高频踩坑点
微服务项目常要拉私有仓库的包,或在国内跑得慢到超时:
- 私有 Git 包必须在
composer.json里显式声明repositories,且类型得是vcs,例如:{ "repositories": [ { "type": "vcs", "url": "https://git.example.com/internal/logger" } ] }漏掉这个,composer require internal/logger会报Could not find package - 国内用户务必配阿里云镜像:
composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/,否则composer install卡在 “Loading composer repositories” 是常态 - 某些共享主机禁用
proc_open(),导致composer update直接卡死或报fork failed——这种环境只能本地装好,把vendor/和composer.lock一起传上去
最易被忽略的是:vendor/ 永远不进 Git,但 composer.lock 必须提交;很多人删了 lock 文件以为能“重来”,结果团队里每人装出一套依赖,半夜线上报错才发现是 guzzlehttp/guzzle 从 7.5 升到了 7.9,中间有个接口签名变了。










