PHP Composer组织供应商导入和私有公共包

时间:2018-03-30 20:39:10

标签: php composer-php packages vendor

我正在开发一个PHP框架作为一个作曲家包,将在我公司的50多个项目(网站)中重复使用。

每个网站都相对较小(15-20个PHP文件,总共不到1-2 MB)。 这些网站也将使用作曲家。

框架包:

  • 很小,包含10-15个基本PHP类。所有50多个项目都将 扩展它们(继承它们的类)。
  • 需要8-9个作曲家包(来自packagist.org,如Monolog,Redis等),需要大约100 MB的磁盘空间。

网站:

  • 在composer.json中需要框架包(见下文)。
  • 包含10-15个扩展(继承)框架类的类。
  • 彼此独立。每个人都独立生活,并没有相互影响。
  • 也是作曲家项目,使用所有作曲家的东西(自动加载,psr4等)。

框架和网站都是私有项目,由于公司政策,不能在GITHUB或Packagist中共享。

Framework composer.json

{
    "name": "Company/Framework",
    "require": {
        "php": ">=5.6.4",
        "mpdf/mpdf": "dev-master",
        "monolog/monolog":"1.2"
    },
    "autoload": {
        "psr-4": {
            "Company\\Framework\\": "src/"
        }
    }
}

每个网站composer.json:

{
    "repositories": [
        {
            "type": "path",
            "url": "../Framework/",
            "options": {
                "symlink": false
            }
        }
    ],
    "require": {
        "Company/Framework": "dev-master",
        "mpdf/mpdf": "dev-master"
    },
    "autoload": {
        "psr-4": {
            "Company\\Site01\\": "src/"
        }
    }
}

我的问题是,作曲家用其依赖项和整个框架目录填充每个网站的供应商目录。 enter image description here 最后,All最终使用了大量的磁盘空间,大约40多GB,主要是使用相同的VENDOR包,一遍又一遍地重复。 我们的PHP代码不到整个项目的1%。

我的问题是:

  • 开发私有包的最佳做法是什么(不是 在公众中分享并在其他项目中重复使用它们?

  • 如何正确地重复使用常用的作曲家库,而不是一遍又一遍地重复使用供应商代码?

1 个答案:

答案 0 :(得分:1)

您不应将供应商文件夹保留在库代码中。删除供应商文件夹,只在库的composer.json中声明库的依赖项。

当您从项目中运行composer install时,composer会将库复制到项目的供应商文件夹中,并将库的依赖项安装在项目内部。

一个更好的选择是使用来自GitHub或Bitbucket的私有存储库,因为您可以控制有权访问它的人,但仍可以使用诸如标记之类的东西进行版本控制。

相关问题