在 Monorepo 中用 Composer 管理多个 PHP 包,核心是通过配置 path 类型仓库(如 "packages/*")将本地子包目录作为可安装源,再以 composer require acme/my-utils:dev-main 方式安装,自动生成指向源码的符号链接实现热更新。

在 Monorepo 中用 Composer 管理多个 PHP 包,核心是让本地开发包能被主项目即时识别和加载,而无需反复发布或手动拷贝。关键不是“绕过 Composer”,而是用 path 仓库类型把本地目录当作可安装的包源。
配置 path 仓库指向本地包目录
在根项目的 composer.json 中声明一个 path 类型仓库,指向你存放各子包的目录(比如 packages/*):
- 仓库配置示例:
"repositories": [ { "type": "path", "url": "packages/*" } ]登录后复制
-
packages/*会匹配所有子目录(如packages/my-utils、packages/api-client),每个目录下必须有独立的composer.json,且包含合法的name(如"acme/my-utils")和version(建议设为"dev-main"或"*@dev") - 注意:路径支持通配符,但不递归子目录;若包在
packages/core/v2,需显式写"packages/core/v2"或调整结构
在主项目中 require 本地包
直接按正常方式 require 子包名,Composer 会自动从 path 仓库解析并软链接(symlink)到 vendor/:
- 执行:
composer require acme/my-utils:dev-main - 成功后,
vendor/acme/my-utils是指向packages/my-utils的符号链接,改代码即实时生效 - 如果子包依赖其他本地包,它们也会被一同解析和链接——前提是那些包也在
path仓库覆盖范围内
避免常见陷阱
path 仓库方便,但几个细节不注意会导致“找不到包”或“装错版本”:
标签: composer monorepo php js json windows ai win
还木有评论哦,快来抢沙发吧~