composer install 只还原 composer.lock 锁定的依赖,无视 composer.json 的任何变更;要使修改生效,必须用 composer update 或 composer require。

因为 composer install 只读 composer.lock,不解析 composer.json 的变更。
为什么 install 不管 composer.json 改了没
composer install 的设计目标是复现 composer.lock 中锁定的依赖树——它完全忽略 composer.json 里新增、删掉或改了版本号的包,除非 lock 文件不存在或结构损坏。
- 你加了一个新包到
require?install不会装 - 你把
"monolog/monolog": "^2.0"改成"^3.0"?install还是装 2.x - 你删了某个包?
install不会卸载它,vendor/ 里照旧留着
想让修改生效,必须用 update 或 require
只有这两个命令会重新解析 composer.json 并生成/更新 composer.lock:
-
composer update vendor/package:只更新指定包及其子依赖(推荐用于精准控制) -
composer update:全量重算所有依赖,风险高,慎用在生产环境 -
composer require vendor/package:自动写入composer.json并更新 lock 和 vendor(新增包首选)
注意:update 会触发版本重解,可能引入意外升级;若只想同步 composer.json 声明和当前 vendor 状态,先 composer update --lock(只更新 lock 文件,不改 vendor)。
将一个或多个视频上传至YouTube。当用户想“上传到YouTube”“发YouTube”“批量上传”“upload to YouTube”“post videos to YouTube”或发布到YouTube时使用此技能。
常见误操作:删了 vendor 但没动 lock,还 run install
这会导致「看似重装,实则一模一样」——install 仍按旧 lock 拉包,你改的 composer.json 还是被无视。
- 想彻底从头来?删
vendor/+composer.lock,再composer install(此时因 lock 缺失,会 fallback 到解析composer.json) - 但更安全的做法是:删
vendor/,保留composer.lock,然后composer install—— 这能确保环境和之前完全一致 - CI/CD 流程中应始终提交
composer.lock,否则每次 install 都可能拉到不同版本
检查是否真改对了 composer.json
手抖写错格式或字段名,composer install 不报错,但你的修改根本不会被读取:
- 确认改的是顶层
require或require-dev,不是拼错成requires或缩进错位 - 运行
composer validate,它会指出 JSON 语法错误、非法字段、缺失 license 等硬性问题 - 运行
composer show --tree | head -n 10,看输出里有没有你新加的包名——没有就说明没进依赖图
真正容易被忽略的是:很多人以为 install 是「安装当前配置」,其实它是「还原锁文件快照」。改完 composer.json 后不碰 update 或 require,等于白改。










