我有一个项目,结构如下:
- 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
文件的使用
- 从技术上讲,您可以向存储库添加一个
- 这意味着任何
git export
将不再拥有测试文件夹,包括Github zip文件。
.gitattributes
文件,该文件为测试文件夹声明了一个export-ignore
规则。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。
.gitattributes
(如Jens建议)与以下内容:
/tests export-ignore
现在,当你在GitHub中创建一个标签/发布时,发布zip将不包含tests
文件夹。
在这种情况下,tests
文件夹将被包含的唯一情况是,如果用户安装了--prefer-source
包,但如果他们这样做,他们应该知道他们在做什么。