发送给打包人员时忽略测试文件夹


Ignore tests folder when send to packagist

我有一个项目,结构如下:

- src
----/ /* Relevant files */
- tests
----/ /* Irrelevant files */
- composer.json
- phpunit.xml

项目已经在每次提交时发送给packagist。但是,它正在发送测试文件。

我想忽略tests文件夹,所以当有人调用composer require my/package时,composer不会下载不必要的文件

这是我的作曲家的内容。Json看起来像:

{
    "name": "my/package",
    "description": "...",
    "type": "library",
    "license": "MIT",
    "require": {
        "php": ">=7"
    },
    "require-dev": {
        "phpunit/phpunit": ">=5.4"
    },
    "autoload": {
        "psr-4": {
            "MyProject''": "./src"
        }
    }
}

发送到packagist时忽略测试文件夹

让我们先澄清一些困惑。

当你为你的仓库启用Packagist时,Packagist将加载composer.json来获取关于你的项目的元数据,并从标签/分支中获取版本信息。

但是你没有把你的PHP代码或任何测试发送给Packagist。


我想忽略测试文件夹,所以当有人调用composer require my/package

时,composer不会下载不必要的文件。

这个问题经常出现。我引用了一个详细的答案,这是我之前写的,它解释了很多背景:https://stackoverflow.com/a/32476500/1163786

export-ignore指令下.gitattributes文件的使用

    从技术上讲,您可以向存储库添加一个.gitattributes文件,该文件为测试文件夹声明了一个export-ignore规则。
  • 这意味着任何git export将不再拥有测试文件夹,包括Github zip文件。

Ok, exclude done..

但是,当有人composer require是你的项目时,它现在将依赖于——prefer-dist设置从dist (zip)安装包。(您将获得--prefer-source的测试)。


  • 如果是一个小库,不要担心。很高兴. .:)

  • 如果它是一个更大的应用程序,那么更好的解决方案是正确打包您的应用程序,而不是依赖于git exported zip发行版。大多数开发人员不再使用build.xml或任何构建脚本,但在我看来,这是正确的方法。

    这意味着一旦你准备好标记一个新版本。您触发构建脚本,它获取所有依赖项,再次运行测试,当一切正常时,删除所有测试并将文件打包以供部署。


小提示:不要忘记在composer.json中添加autoload-dev部分用于测试。

如果你的Packagist包链接到GitHub的repo,只需创建一个"release";

这对于您的最终用户来说是开箱即可使用的,因为Composer安装/更新默认使用--prefer-dist,它提供"发布"中的包zip。

最简单的方法(这是一些Symfony包做的,例如),是创建一个.gitattributes (如Jens建议)与以下内容:
/tests export-ignore

现在,当你在GitHub中创建一个标签/发布时,发布zip将不包含tests文件夹。

在这种情况下,tests文件夹将被包含的唯一情况是,如果用户安装了--prefer-source包,但如果他们这样做,他们应该知道他们在做什么。