我有一个应用服务器,它就像一个博客系统(我的 wordpress killer )。它基于托管在 github 中的 php,并使用 composer 来管理依赖项。每个安装都托管在我的服务器中(我为他们安装)。当客户需要新的“插件/插件”时,我会创建一个新包并将其托管在私有(private)存储库托管中。当我需要添加新包时,问题就来了:
Client 1.
- package for calculate prices
Client 2.
- package for show a welcome message
Client 3.
- package for add a calendar
我的应用程序将准备好在所有实例中使用的每个包,因为我通过 Composer 需要它们:
"require": {
"killer/calculate": "dev-master",
"killer/message": "dev-master",
"killer/calendar": "dev-master"
}
现在想象一下,如果我有 2000 个客户并且他们中的每个人都在请求自定义包。我怎样才能提供一个应用程序(大量克隆),而只是在每个安装中只保留每个客户需要的包?
假设的解决方案
我正在搜索(如果可能的话)类似下面的内容。对于每个安装,手动创建一个文件,其内容指定所需的包。例如,假设每个客户端的安装都是这样的:
//composer.json
"require": {
}
//plugins.json (this file is ignored via .gitignore)
{
"killer/calculate": "dev-master"
}
然后,以某种方式告诉 composer.json
需要来自 plugins.json
的数据。通过这种方式,我避免创建一个巨大的 composer.json
为所有客户端共享不必要的包。
最佳答案
有一个feature request允许 composer.json
扩展另一个文件。你应该去评论它以引起一些注意。
使用该功能的方法是创建一个 default.json
文件,其中包含所有常规 composer.json
内容,包括 require
部分列出了您需要的所有常用包。
// default.json
{
"require": {
"php": ">=5.4.0"
}
}
然后为每个扩展和/或覆盖 default.json
的项目创建一个 composer.json
文件,如下所示:
// composer.json
{
"require": {
"killer/calculate": "dev-master"
},
"extends": "default.json"
}
最终结果为:
{
"require": {
"php": ">=5.4.0",
"killer/calculate": "dev-master"
}
}
如果您不能等待 merge 请求,那么您可以去查看 composer fork来自 merge 请求的作者并尝试一下。
关于php - 动态包含在 composer.json 中的克隆项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32661824/