具有动态的克隆项目包含在composer.json中

man*_*nix 10 php git composer-php

我有一个应用服务器,它就像一个博客系统(我的wordpress杀手).它基于github托管的php,并使用composer来管理依赖项.每个安装都托管在我的服务器中(我为它们安装).当客户端需要新的"插件/插件"时,我创建了一个新的包并将其托管在私有存储库托管中.当我需要添加新包时会出现问题:

Client 1.
- package for calculate prices

Client 2.
- package for show a welcome message

Client 3.
- package for add a calendar
Run Code Online (Sandbox Code Playgroud)

我的应用程序将准备好在所有实例中使用每个包,因为我通过composer要求它们:

"require": {
        "killer/calculate": "dev-master",
        "killer/message": "dev-master",
        "killer/calendar": "dev-master"
}
Run Code Online (Sandbox Code Playgroud)

现在成像,如果我有2K客户端,他们每个人都在请求自定义包.我如何提供一个应用程序(大规模克隆),但只是在每个安装中保留每个客户端需要的软件包?

假设解决方案

我正在搜索(如果可能的话)以下内容.对于每个安装,请手动创建文件,其内容指定所需的包.例如,假设每个客户端的安装都是这样的:

//composer.json
"require": {
}

//plugins.json  (this file is ignored via .gitignore)
{
    "killer/calculate": "dev-master"
}
Run Code Online (Sandbox Code Playgroud)

然后,以某种方式告诉composer.json要求来自的数据plugins.json.通过这种方式,我避免composer.json为所有客户创建一个巨大的共享不必要的包.

Bro*_*ary 7

有一个允许扩展另一个文件的功能请求composer.json.你应该去评论它以引起一些注意.

使用该功能的方法是创建一个default.json包含所有常规composer.json内容的文件,包括require列出所需所有常用软件包的部分.

// default.json
{
    "require": {
        "php": ">=5.4.0"
    }
}
Run Code Online (Sandbox Code Playgroud)

然后composer.json为每个项目扩展和/或覆盖一个文件,default.json如下所示:

// composer.json
{
    "require": {
        "killer/calculate": "dev-master"
    },
    "extends": "default.json"
}
Run Code Online (Sandbox Code Playgroud)

最终结果将是:

{
    "require": {
        "php": ">=5.4.0",
        "killer/calculate": "dev-master"
    }
} 
Run Code Online (Sandbox Code Playgroud)

如果你不能等待合并请求,那么你可以从合并请求的作者那里检查出作曲家分叉并试一试.

  • 这就是我想要的.如果作曲家团队合并该功能,那真的很酷. (2认同)