我正在尝试找到将作曲家用于模块化结构的最佳方法。
假设我有这个框架树:
/cms
/site/addons
假设插件可供开发人员使用composer.json
安装添加他们的项目。 喜欢/site/addons/MyNewFeature/composer.json
所以下一个问题是/vendor
位置。每个插件都应该有一个/vendor
目录,并且我应该在主框架中自动加载它们,我认为它的性能太高了,多个作曲家安装可能会安装很多相同的依赖项。而且我不能像/site/addons/vendor
那样将它们全部安装在同一个/vendor
目录中,因为作曲家会自动删除当前安装中未包含的所有项目并使用自己的锁定文件。
你怎么能为基于模块化项目的系统进行多个作曲家安装;虽然每个项目都需要自己的作曲家供应商,但为了性能,最好只包括一个供应商安装。我还没有找到解决这个问题的方法,想知道你们中是否有人有想法或引导我走向正确的方向。
这几乎就像您需要一个主composer.json
安装,它会自动转到每个插件并安装它们......
另一种解决方案只是对所有插件(安装/更新(使用 composer,这给了我更少的控制,并且所有内容都位于/vendor
目录中。
经过一些研究和测试,我遇到了这个概念。
这允许框架按照设计的方式手动安装/更新插件,并使用通配符路径在主composer.json
文件中repositories
。
"repositories": [
{
"type": "path",
"url": "../site/addons/*",
"options": {
"symlink": false
}
}
]
现在它将检查所有插件目录中的 composer.json 文件,并将其所有依赖项安装到我最初想要的通用/vendor
目录中。
我不确定这样做以后可能会出现的问题,但到目前为止,这给了我想要的控制。
框架只需要确保主 json 中的require
具有启用的所有插件。
https://getcomposer.org/doc/05-repositories.md#path