composer本地包需同时满足三条件:composer.json含合规name、autoload和type字段;主项目配置path型repositories并精确引用;修改后须执行composer update vendor/name而非全量更新。

Composer 本地组件包不是“写完就能用”,关键在 composer.json 的结构是否合规、自动加载是否生效、主项目引用是否精准——三者缺一不可。
本地包的 composer.json 必须含 name、autoload、type
很多开发者把目录丢进去就跑 composer update,结果报 Could not find package xxx/yyy。根本原因是本地包根目录下的 composer.json 缺关键字段:
-
name必须和主项目require中写的完全一致(包括大小写和斜杠方向),例如"vendor/my-component" -
type建议显式写"library",避免被误判为插件或应用 -
autoload至少要有psr-4映射,否则类根本不会被加载;"MyComponent\": "src/"比空配置或只写files更可靠 -
version可写"dev-main"或"1.0.x-dev",但不能省略——Composer 需要它参与版本解析
主项目 require 本地包时,必须配 path 仓库且路径要精确
repositories 是启用 path 加载的前提,漏掉这一步,Composer 就当它不存在:
工作流任务拆解与模型编排技能。使用场景:(1) 收到复杂工作任务需要拆解为可执行步骤,(2) 需要为不同步骤选择最合适的模型,(3) 需要跟踪工作流进度和模型使用情况,(4) 长时间任务卡住需要问题诊断和解决方案。
-
url必须指向**包含composer.json的目录**,不是它的父目录,也不是src/子目录 - 路径支持相对路径(如
"../my-component")和绝对路径(如"/Users/me/pkg/my-component"),但不支持~或通配符 - 不要写成
"vendor/my-component": "dev-main",而应写"vendor/my-component": "*"或"dev-main"——*表示“取本地最新元信息”,最稳妥 - 执行
composer update vendor/my-component,而不是全量update,避免意外升级其他依赖
改了本地包代码,主项目没反应?不是配置问题,是 Composer 的默认行为
这是最常被误解的一点:path 类型仓库 **不会实时挂载**,它只是让 Composer 把本地目录当源读取一次,然后把文件复制进 vendor/。所以:
- 你在
my-component/src/下改了类,主项目不会自动感知——必须重新运行composer update vendor/my-component - 如果你需要热更新效果,得手动删掉
vendor/vendor/my-component目录再 install,或者用符号链接(需额外脚本或插件支持) - 检查是否真复制进去了:进
vendor/vendor/my-component看文件内容是否和你本地src/下一致,不一致就是没 update 成功 - 注意权限问题:某些系统下,如果
vendor/是 root 创建的,普通用户 update 可能失败,建议统一用当前用户操作
PSR-4 自动加载失效?先确认命名空间与路径是否严格对应
类存在、composer.json 有 autoload、也 update 过了,但 new MyComponentFoo 仍报 class not found——大概率是映射断了:
-
"MyComponent\": "src/"意味着MyComponentFoo必须位于src/Foo.php,而不是src/MyComponent/Foo.php - 命名空间末尾的反斜杠
\是必须的,漏掉会变成前缀匹配,导致加载错位 - 修改 autoload 后,必须运行
composer dump-autoload(或update会自动触发),否则 vendor/autoload.php 不更新映射表 - 可以用
composer show -p vendor/my-component查看实际加载路径,验证是否指向你预期的本地目录
真正麻烦的不是写包,而是让 Composer “信”这个包——它对 name、autoload、路径层级、版本字段都极其较真,任一环节松动,整个链路就静默失效。










