composer update vendor/package-name是最直接有效的方式,因composer install默认跳过已存在的path依赖(不校验源内容变更),而update会强制重解析、重建软链接并更新autoload映射;需确保name完全一致且type为path。

Composer强制重装path类型依赖时,composer install 不起作用
因为 composer install 默认跳过已存在的 path 仓库(即使源目录内容已变更),它只检查 composer.lock 中的 commit hash 或 symlink 状态,而 path 类型依赖压根不生成 hash,也不走 Git 检出逻辑——所以改了本地包代码,install 完全无感。
composer update vendor/package-name 是最直接有效的方式
对 path 依赖执行 update,Composer 会强制重新解析该包的 composer.json、重新软链接(或复制,取决于 symlink 配置),并更新 vendor/autoload.php 中的映射。
- 确保
repositories中该包的type是path,且url指向正确本地路径(支持相对路径,如../my-local-package) - 如果之前用过
composer require vendor/package-name --dev安装过,直接运行composer update vendor/package-name即可 - 若提示
Package "vendor/package-name" not found,说明名字没对上:检查composer.json里该 path 包自身的"name"字段,必须与require中的完全一致(包括大小写) - 加
-v参数能看到详细动作,例如:Updating symlink for vendor/package-name (to ../my-local-package)
删 vendor/package-name 后再 install 也行,但有风险
手动删除后运行 composer install 确实会重建 path 依赖,但它依赖 composer.lock 的完整性;若 lock 文件里该包记录异常(比如被其他操作污染过),可能触发错误或静默失败。
- 仅推荐在
update报错且确认 lock 文件干净时尝试 - 务必先备份
composer.lock,或确认 Git 已提交最新状态 - 删除后不要运行
composer require——这会走 Packagist 远程安装,不是你想要的 path 行为 - Windows 下若看到
symlink失败,检查是否以管理员权限运行终端,或在composer.json的config中设"use-symlinks": false
为什么不用 composer dump-autoload?
这个命令只刷新自动加载映射,不触碰依赖的物理安装。哪怕你改了 path 包里的类名、方法签名或 autoload 配置,dump-autoload 也不会重建 symlink 或重新读取其 composer.json ——它假定 vendor 目录结构已经正确。
真正要让改动生效,核心是让 Composer 重新“看到”那个 path 目录的内容变化,只有 update 或彻底清除后重装能做到。路径本身没变、但内容变了,Composer 就不认为需要动,这是设计使然,不是 bug。


















