不会。composer install 只读取 composer.lock 和 composer.json 中声明的依赖,不扫描或识别未声明的本地扩展包;必须通过 repositories 声明 path 类型源并执行 composer require 才能使其被 install 还原。

composer install 会读取本地扩展吗?
不会。composer install 只关心 composer.lock 和 composer.json 中声明的依赖,它不扫描、不加载、也不识别项目目录下未被声明的“本地扩展包”。所谓“本地扩展”,比如你手动拷贝进 vendor/myorg/local-package 的代码,或放在 packages/ 目录下的私有包,composer install 默认完全无视——除非你明确告诉它这些路径是合法源。
怎么让 composer install 装上本地写的扩展?
必须通过 repositories + require 显式声明,否则 install 不会处理。常见错误是直接往 vendor/ 里扔代码、改 autoload、然后跑 composer install —— 这命令根本不会触发任何变化,因为 lock 文件没记录这个包,它连看都不会看一眼。
- 在
composer.json的repositories字段添加本地路径源(type: "path"):"repositories": [ { "type": "path", "url": "./packages/my-local-package" } ] - 确保
./packages/my-local-package/composer.json里有合法name(如"myorg/my-local-package")和version(如"dev-main") - 执行
composer require myorg/my-local-package:dev-main—— 注意:不是install,也不是手动改require后跑update - 此时
composer.lock才会记录该包的本地路径和版本,后续composer install才能还原
为什么改了 vendor 里的本地包,再跑 composer install 没反应?
因为 composer install 是“还原型”操作,它只比对 composer.lock 里的快照,不检查 vendor/ 内容是否被手改。你改了 vendor/myorg/my-local-package/src/ 里的代码,install 不会覆盖、也不会报错、更不会重新链接——它只确认“这个包的路径和版本是否已存在且匹配”。所以:
- 本地开发调试时,用
path类型仓库 +require后,应直接编辑packages/my-local-package/下的源码,vendor/会软链接过去(Composer 2.2+ 默认行为) - 如果看到
vendor/里是复制而非链接,检查是否禁用了symlinks或 PHP 不支持符号链接(Windows 需管理员权限或启用开发者模式) - CI/CD 环境中禁止依赖软链接——要用
"options": {"symlinks": false}显式关闭,并接受复制开销
composer install 能否跳过 autoload 生成?
不能跳过,但可以控制方式。composer install 必然重建 vendor/autoload.php 和相关映射文件(classmap、psr-4 等),这是它还原环境的一部分。如果你手动改过 autoload 配置(比如加了 files 或调整了 psr-4 映射),这些变更必须写进 composer.json 的 autoload 字段,否则 install 生成的自动加载器不会包含它们。
- 本地扩展若需被自动加载,必须在它的
composer.json里声明autoload(如"psr-4": {"MyOrg\": "src/"}) - 主项目的
composer.json无需额外配置——只要该扩展被require并锁入lock,其 autoload 规则就会合并进最终的autoload.php - 运行
composer dump-autoload可单独刷新自动加载,但它不改变依赖状态,也不能替代install来引入新包
name 必须全局唯一,且不能和 Packagist 上已有包重名;一旦重名,即使你配了 path 源,Composer 也可能优先走远程源并报错——这不是 bug,是设计使然。


















