【问题标题】:How to remove all tests in composer php?如何删除composer php中的所有测试?
【发布时间】:2015-12-05 04:04:24
【问题描述】:

我是作曲家开发的新手。我刚刚开始在我当前的项目中与作曲家合作。而且我认为我的问题之前已经被问过,或者我对作曲家很陌生:D

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

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

【问题讨论】:

  • 我也想这样做,但到目前为止,这似乎是一个未解决的问题。
  • 没有作曲家命令 - 只是做这样的事情find -name test -type d -delete vendor

标签: php composer-php


【解决方案1】:

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

这是一个有趣的问题。

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

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

很多用户都想要这个功能,但不幸的是 Composer 还没有提供它。我猜,如果有人花时间解决问题,Composer 维护者会合并一个排除文件夹(减少功能)。建立标准是一项艰巨的工作。也可以创建一个 Composer 插件来提供此功能。


这样的功能是什么样子的?

  1. 解决此问题的一种方法是为文件提供一个通用的黑名单/白名单功能,以便将其保留在composer.json 文件中以供生产使用。在我看来,仅添加一个排除部分只能部分解决问题,因为您不能覆盖包中的决定。

    • 第一个可能会通过遍历所有 composer.json 文件来生成黑名单,从而生成要删除的文件和文件夹列表。
    • 然后可以使用主项目中的白名单来踢掉黑名单中的内容(= 白名单内容)。这是为了覆盖在获取的包中做出的排除决定。
    • 最后,在 vendor 文件夹中使用黑名单进行删除运行。
    • 这意味着拉取供应商包的项目具有完全控制权。这种方法提供了很大的灵活性:如果包提供者将测试文件夹列入黑名单,但使用包的开发人员想要保留它,他可以将该包的文件夹列入白名单。但他也无能为力,按照正常的黑名单去。

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

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

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

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

    David Grudl (@dg) 在他的 Composer Cleaner.

    它的实验性。做一个备份。

关于.gitattributes 文件与export-ignore 指令的使用

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

Composer 维护者正在推广它的使用(参见 alcoholnaderman 的 cmets,而例如 Symfony dropped its usage

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

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

即使有些开发者采用了这种做法,很多使用 Composer 获取“Source”的方法也没有得到处理:hg、svn、git source。

【讨论】:

  • 值得注意的是,Composer 维护者停止推广 .gitattributes 作为从包中排除内容的一种方式。由于 Composer 通常从 Git 存储库获取分发包的方式,该选项仍然存在,但它已被标记为 Composer 本身“超出范围”。
【解决方案2】:

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

【讨论】:

    【解决方案3】:

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

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

    这可能仍然包括所有测试,但建议不要在可分发包中包括测试。对于 GitHub 上的包,如果 .gitattributes 文件的内容如下:

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

    阅读全文: I don't need your tests in my production (Reddit)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-12-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-06-01
      • 2020-11-06
      相关资源
      最近更新 更多