php - 动态包含在 composer.json 中的克隆项目

标签 php git composer-php

我有一个应用服务器,它就像一个博客系统(我的 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/

相关文章:

php - 如何安装基于yii的github项目

使用命名空间找不到 PHP 类

javascript - AngularJS:在文件上传时接收发布的数据

php - 如何在表格行中显示数据库记录

php - Laravel 和 PHPStorm 项目的 gitignore 中应该包含什么?

git - 列出尚未推送到源的 Git 提交

javascript - 在ajax中使用函数外部的变量

PHP:用于匹配每一行的正则表达式

git - 如何根据提交消息触发azure devops构建管道?

php - Composer 使用 MAMP PHP 版本