下载php composer依赖项的更好方法

时间:2012-12-30 01:47:00

标签: php build-process composer-php

我一直在JAVA中使用maven并开始使用PHP Maven,最近我切换到了作曲家。

我的项目是使用Zend Framework 2,团队只检查应用程序代码而不是供应商目录中的任何内容。这样做是为了避免冲突,而不是让SVN下的库。

现在,每当开发人员设置他或她的新环境时,我们都会发现,作曲家从互联网中提取依赖关系。这需要相当长的时间。

有没有更好的想法/方法来加快速度或以不同的方式处理项目以避免这个问题?

maven使用maven代理服务器,它可以缓存下载并可以再次在网络中使用,但我们是否有任何解决方案来处理这样的问题?

2 个答案:

答案 0 :(得分:2)

Composer是一个非常年轻的项目,因此可能会遗漏一些内容,例如: Maven没有麻烦。

您可以按照composer docs中的说明设置自己的Packagist服务器。我相信packagist有一些缓存选项,可以用来在packagist服务器上存储包。

您还可以做的是分叉您的依赖项并将它们推送到公司拥有的私有存储库。在您的composer.json中,您现在只能使用此依赖项,从而加快克隆速度。当然,这需要您维护所有不同的依赖项(尽管可以使用脚本和cronjob完成,从github仓库中提取数据并将其推送到您所拥有的公司)。

我也相信作曲家有一些代理选项,但我不认为这些是为了缓存依赖关系。

最后一个选择是开发这样的东西,作为作曲家/包装者的一部分或作为独立的。

答案 1 :(得分:1)

在PHP中,现有选项可以在本地运行像repo这样的作曲家,它在这里称为Satis(它实际上是由Composer提供的):https://github.com/composer/satis

因此,您可以在服务器上本地运行它,并指出您的编写器将其用作默认的编写器存储库,并且Satis确保所有已安装的软件包和不同版本作为ZIP文件缓存在磁盘上,因此可以更快地检索到从Internet下载它们。

您可以这样做:

{
    "repositories": [ 
        { 
            "type": "composer", 
            "url": "http://satis.example.org/" 
        }
    ],
    "require": {
        "company/package": "1.2.0",
        "company/package2": "1.5.2",
        "company/package3": "dev-master"
    }
}

这也允许您拥有私有包和库而不在GitHub上公开它们。

另一个巨大的优势是当GitHub出于任何原因而无法部署时,因为您的所有依赖项都在本地缓存。这假设您没有在发布中添加新的,不存在的包。