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

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"
        }
    }
}

Ignore tests folder when send to packagist

让我们先理清一些困惑。

当您为您的存储库启用 Packagist 时,Packagist 将加载 composer.json 以获取有关您的项目的元数据并从 tags/branches 中获取版本信息。

但是您没有将 PHP 代码或任何测试发送给 Packagist。


I'd like to ignore tests folder, so composer wont download unecessary files when someone calls composer require my/package

这个问题经常出现。我引用的是我前一段时间写的详细答案,它解释了很多背景:

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

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

好的,排除完成..

但是,当某人 composer require 是您的项目时,它现在将依赖 --prefer-dist 设置从 dist (zip ). (您将通过 --prefer-source 获得测试)。


  • 如果是小图书馆就不用担心了。开心点.. :)

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

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


小提示:不要忘记在 composer.json.

中添加一个 autoload-dev 测试部分