必须为每个内核配置独立 composer.json 并通过 path 仓库接入主项目,否则将导致 autoload 冲突、版本降级和 ci 构建不可控;这是架构约束问题,而非配置技巧问题。

直接说结论:用 Composer 管理微内核框架的依赖和加载,必须放弃“单 composer.json 全局管理”的惯性思维,否则 autoload 冲突、版本降级、CI 构建不可控会立刻出现。
为什么不能把所有内核写进一个 composer.json
这不是配置技巧问题,是架构约束失效。当你把 user-service、order-core、payment-gateway 全塞进根目录的 composer.json 的 require 里,就等于强制它们共享 vendor/ 和同一套 PSR-4 映射。
-
autoload中若都声明"App\": "src/",最后加载的模块会覆盖前者的命名空间,类找不到 -
guzzlehttp/guzzle在支付模块要求^7.5,用户中心却锁死^6.5,composer install会静默选择兼容交集(比如6.5.0),但没人告诉你哪个内核因此丢了 HTTP/2 支持 - 每次
git push触发 CI,都要全量composer install所有内核依赖,哪怕只改了modules/order-core/src/Validator.php
每个内核必须带独立 composer.json 和 path 仓库声明
主项目不直接 require 包名,而是通过本地路径仓库把各内核“接入”进来——这是隔离 autoload 和依赖版本的唯一可靠方式。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 每个内核(如
modules/user-service)含完整composer.json:"name"唯一(如"myapp/user-service")、"autoload"精确到自身命名空间(如"MyApp\UserService\": "src/") - 根目录
composer.json只写仓库声明和宽松依赖:{ "repositories": [ {"type": "path", "url": "./modules/user-service"}, {"type": "path", "url": "./modules/order-core"} ], "require": { "myapp/user-service": "*", "myapp/order-core": "*" } } -
*默认匹配dev-main分支;要锁定版本,写成"dev-main#abc123"或"1.2.0"(需内核自身打 tag)
composer install 后不是自动启用内核,而是靠应用层显式加载
Composer 只负责把代码软链接进 vendor/ 并生成 autoload 文件,绝不允许它自动注册任何服务或事件监听器——那会破坏内核间的控制权边界。
- 不要在内核的
autoload里写"files"数组去 require 初始化脚本 - 主应用启动时,由你自己决定加载顺序和条件:
// 比如按配置开关启用 if (config('kernel.user_service.enabled')) { $kernel->register(new MyAppUserServiceServiceProvider()); } - 内核间通信走接口契约(如
OrderCreatedEvent),而非直接调用对方类——否则又退化成紧耦合单体
Docker 构建时必须用多阶段 + composer install --no-dev
生产镜像里不该有 phpunit、phpstan,也不该保留 composer.lock 以外的元数据。否则镜像臃肿、攻击面扩大、启动变慢。
- 第一阶段用
composer/composer:2-bin安装依赖,RUN composer install --no-dev --no-scripts --no-autoloader - 第二阶段用
php:8.2-slim,只COPY --from=0 /app/vendor ./vendor和应用代码 - 最后执行
composer dump-autoload --optimize,生成 classmap 加速加载 - 务必在构建前
chown -R www-data:www-data vendor/,避免运行时权限错误
最易被忽略的一点:内核的 composer.json 必须声明 "minimum-stability": "stable",否则 path 仓库在某些 Composer 版本下会跳过稳定性检查,导致 dev-main 被当作稳定版安装——而你根本没测试过那个 commit。










