直接修改 composer.json 后必须运行对应命令才生效:install 按 lock 还原依赖,update 重解析并更新 lock,仅改 autoload 可用 dump-autoload。

直接改 composer.json 文件就行,但改完必须运行 composer install 或 composer update 才生效,否则只是纸上谈兵。
改 composer.json 之前先搞清它是干啥的
composer.json 不是启动脚本,也不是配置缓存——它是 Composer 的“需求清单”,声明项目依赖、自动加载规则、脚本钩子等。你删掉一个 "require" 里的包,不代表它立刻被卸载;你加了一行 "autoload",不代表类马上能被找到。
- 修改后不执行命令 → 文件改了等于没改
- 用
composer install:按composer.lock精确还原依赖(适合部署或协作) - 用
composer update:按composer.json重新解析并升级依赖(会更新composer.lock) - 只改
scripts或autoload?通常只需composer dump-autoload就够了
常见改法和对应风险点
手动编辑 composer.json 最常踩的坑,不是语法错,而是语义错或漏联动。
-
加新包但没运行
composer require vendor/name→ 手动写进require后忘记install/update,结果代码报Class not found -
改
autoload的"psr-4"映射路径写错斜杠 → Windows 用反斜杠\,Linux/macOS 要正斜杠/,建议统一用/(Composer 内部会自动适配) -
把
"minimum-stability"改成"dev"又没加"prefer-stable": true→ 下一堆-dev版本,CI 构建可能突然失败 -
删了
require-dev里的测试工具,但 CI 脚本还调用phpunit→ 本地没事,上线就报 command not found
composer.json 编辑后验证是否生效
别光看文件有没有保存,得让 Composer “认”这个改动。
- 运行
composer validate→ 检查 JSON 格式和字段合法性(比如type值是否合法) - 运行
composer show→ 看当前已装的包是否匹配你写的require - 改了
autoload?跑composer dump-autoload -o(-o表示优化,生成 classmap)再试 new 一个类 - 不确定改的是不是最新行为?删掉
vendor/和composer.lock,再composer install重来一遍
最麻烦的不是不会改,而是改了没意识到要触发哪条命令,或者改了路径却忘了清 autoload cache。尤其团队协作时,composer.lock 和 composer.json 不同步,问题往往拖到 CI 阶段才爆出来。










