如何删除composer php中的所有测试?

时间:2015-09-09 09:00:57

标签: php composer-php

我是作曲家发展的新手。我刚开始在当前项目中使用composer。而且我认为我之前已经提出过我的问题,或者我对作曲家说道:D

每个依赖项的供应商中都有许多测试文件和目录。我只是想在将它们上传到服务器之前删除这些测试。

是否有任何命令要删除这些测试,或者我需要手动删除它还是什么......? :'(

3 个答案:

答案 0 :(得分:7)

  

是否有任何命令要删除这些测试,或者我需要手动删除它还是什么......? :'(

这是一个有趣的问题。

目前,您作为包消费者不能自动忽略测试。 下载供应商后,没有Composer命令可以清除所有文件夹。要解决此问题,请在应用程序构建过程中清理vendor dir。它是在手动选择的文件集的引导期间删除运行,然后上载。这是一个设置步骤,可与用于生产的缓存预热或初始数据库设置相媲美。无聊的工作:(

之前已请求并讨论过从供应商文件夹中删除测试文件夹(和其他开发内容)的主题,请参阅例如编写器问题#1750#4438

很多用户都想要这个功能,但遗憾的是Composer还没有提供这个功能。我想,如果有人投入时间来解决问题,Composer维护者会合并排除文件夹(reduce功能)。努力建立标准。它还可以创建一个Composer插件来提供此功能。

这样的功能怎么样?

  1. 解决此问题的一种方法是为composer.json文件中的生产文件提供一般黑名单/白名单功能。仅添加一个排除部分只能部分地解决这个问题,因为你无法覆盖在包中做出的决定。

    • 第一个可能会通过迭代所有composer.json文件来生成一个黑名单,生成要删除的文件和文件夹列表。
    • 然后,可以使用主项目中的白名单来从黑名单(=白名单内容)中获取内容。这是为了覆盖在获取的包中做出的排除决定。
    • 最后,在供应商文件夹中使用黑名单进行删除运行。
    • 这意味着拉动供应商包的项目具有完全控制权。这种方法提供了很大的灵活性:如果一个包提供者将测试文件夹列入黑名单,但是消费者需要保留它的包,他可以将该包的文件夹列入白名单。但是他也可以什么也不做,并与正常的黑名单一起使用。

    在获取源而不是Dist时,也许还可以尊重程序包的export-ignore文件中的.gitattributes设置。

  2. 另一种方法是专注于自动加载说明。

    Composer在require-devautoload-dev旁边提供requireautoload。这意味着我们在开发和生产类之间有明确的分离。考虑一下phpunit依赖关系和你在require-dev中定义的test文件夹和autoload-dev中定义的测试命名空间。

    这使得可以使用自动加载映射并删除未包含在Composers“自动加载范围”中的所有文件进行生产。

    David Grudl(@dg)在他的作品中使用了这种方法 Composer Cleaner

    它的实验。做备份。

  3. 关于使用.gitattributes指令

    export-ignore文件的用法

    是的,这是减少git档案大小的一种方法,但它从未被PHP社区用作标准或最佳实践。

    Composer维护者正在推广其使用(请参阅 alcoholnaderman)的评论,例如Symfony dropped its usage

    目前对此问题的最佳做法没有明确的指导。 所以,我不确定这是一种最佳做法,我们应该真正推广或建议这一点。

    用于“Dists”,用composer --prefer-dist获取。

    即使一些开发人员采用这种做法,很多方法都不会使用Composer获取“Source”:hg,svn,git source。

答案 1 :(得分:2)

不是直接的,但如果软件包维护者遵循一些最佳实践,则可能。

--prefer-distcomposer install使用composer update参数,然后composer将尝试下载软件包的distributable而不是其源代码。对于GitHub上的软件包,这意味着它会下载一个zip文件而不是克隆存储库。

这可能仍然包括所有测试,但建议不要在distributable中包含测试。对于GitHub上的软件包,如果存在包含以下内容的.gitattributes文件,则排除测试。

/tests              export-ignore
/phpunit.xml        export-ignore

了解详情: I don't need your tests in my production (Reddit)

答案 2 :(得分:1)

有一个插件可以做到这一点:composer cleanup。作者警告该包是实验性的,所以要小心。

相关问题