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


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

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

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


11901
2017-09-09 09:00


起源

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


答案:


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

这是一个有趣的问题。

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

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

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


这样的功能怎么样?

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

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

    也许人们也可以尊重 export-ignore 中的设置 .gitattributes 获取源的文件,而不是Dist。

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

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

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

    David Grudl(@dg)在他的作品中使用了这种方法 作曲家清洁工

    它的实验。做一个备份。

关于a的用法 .gitattributes 文件 export-ignore 指示

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

Composer维护者正在推广它的使用(参见 的评论  和 naderman),例如 Symfony放弃了它的使用

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

它用于“Dists”,取而代之的是 composer --prefer-dist

即使一些开发人员采用这种做法,使用Composer获取“Source”的很多方法都没有得到解决:hg,svn,git source。


7
2017-09-09 09:59



值得注意的是,Composer维护者停止了推广 .gitattributes 作为从包中排除东西的一种方法。由于Composer通常从Git repos获取分发包的方式,该选项仍然存在,但它已被标记为Composer本身的“超出范围”。 - Sven


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

使用 --prefer-dist 争论 composer install 和 composer update然后作曲家会尝试下载包的可分发而不是源代码。对于GitHub上的包,这意味着,它下载一个zip文件而不是克隆存储库。

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

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

阅读更多:  我的生产中不需要你的测试(Reddit)


1
2017-09-09 10:10





有一个插件可以做到这一点: 作曲家清理。作者警告说包装是实验性的,所以要小心。


1
2017-09-09 18:18