Composer php 如何使用Composer忽略目录?
我想发布一个PHP库,并将其提交,以便通过安装 我的库具有以下结构:Composer php 如何使用Composer忽略目录?,composer-php,Composer Php,我想发布一个PHP库,并将其提交,以便通过安装 我的库具有以下结构: lib/ tests/ composer.json README.md 基本上,每当我在项目的composer.json中包含这个库时,我都希望所有内容都被复制,除了tests目录之外,这个目录很麻烦,只有在开发库本身时才需要。否则,这只是浪费空间(尤其是在将项目打包用于生产时) 是否可以从库的composer.json中排除此目录?这在composer中是不可能的。但是,有一些方法可以做到这一点: 当您使用--prefe
lib/
tests/
composer.json
README.md
基本上,每当我在项目的composer.json
中包含这个库时,我都希望所有内容都被复制,除了tests
目录之外,这个目录很麻烦,只有在开发库本身时才需要。否则,这只是浪费空间(尤其是在将项目打包用于生产时)
是否可以从库的
composer.json中排除此目录?这在composer中是不可能的。但是,有一些方法可以做到这一点:
- 当您使用
--preferredist
运行update或install命令时,Composer会尝试在github上下载归档文件。您可以将该测试目录放入项目根目录中的.gittributes
文件中,从存档中删除该测试目录:
Tests/ export-ignore
- Composer将只使用github上的标记。在创建标记时,只需临时删除tests目录也可以做到这一点
自2015年11月11日起,通过
资料来源:
编辑:曲解。上述操作只允许自动加载程序忽略指定的路径,实际上并不会阻止它们在安装时复制到文件系统。可以通过在存档
键内的composer.json
文件中添加排除模式来控制存档创建。有关详细信息,请参阅
给出的示例(从上面的URL引用):
示例将包括/dir/foo/bar/file
,/foo/bar/baz
,/file.php
,/foo/my.test
,但它将排除/foo/bar/any
,/foo/baz
,以及/my.test
这样,您就可以获得与.gittributes
相同的控制,而不必使用Git或影响需要在所述文件中进行不同设置的任何进程。这可以通过更新后cmd
键中的composer.json
文件实现自动化:
"scripts": {
"post-update-cmd": [
"rm -rf vendor/aura/intl/tests vendor/cakephp/cakephp/tests"
],
},
或使用模式删除目录:
"scripts": {
"post-update-cmd": [
"find vendor/ -type d -regextype posix-extended -iregex '.*/(doc|docs|example|examples|test|tests|tmp)' -print -exec rm -r {} +"
],
},
太好了,谢谢。.gittributes
解决方案看起来很有希望。不过,从GitHub下载ZIP不是默认行为吗?@Benjamin否,它从标记而不是ZIP下载代码。您必须使用——preferreddist
来获取zip(在anser中使用了错误的开关,修复了know)实际上是这样说的:对于稳定版本,composer将默认使用dist
。感谢指针!我正要将您的答案标记为已接受,但在阅读文档后,看起来这只是将这些文件从自动加载程序中排除:它们仍将存在于存档中。这显然是第一步,但我的最终目标是在从Composer安装时完全删除测试文件,从而减少归档文件的大小。哦,很抱歉,在这种情况下我误解了这个问题:)所以您需要类似于Bower中的“忽略”选项(忽略[array]:生产中不需要的一系列路径,您希望Bower在安装软件包时忽略这些路径。)-我不知道composer中的该功能-您是否在上创建了功能请求?谢谢,我阅读了您链接到的段落,但我无法理解此归档的目标:据我所知,PackageGist不托管包存档;相反,Composer可以通过克隆git repo或从ZIP归档文件(通常是从GitHub下载,我想这只是遵循.gittattributes
,而不是Composer.json
)下载包。Composer是否仍然这样做,但最终会在本地删除排除的文件?这是一个非常好的问题,我将进行调查。确保此设置会在Satis运行期间影响包的创建。我不确定是否要从Github下载软件包。@Sven您调查过了吗?我很快就看了一下。我的印象是:Composer既有处理.gitignore/.gitattributes
文件的代码,也有我上面提到的配置,这表明Composer至少能够在本地处理这两个不同的排除模式源。这将解释为什么Satis也会受到影响,因为它只是编排了已经存在的编写器代码,没有添加太多内容。所以答案似乎是:“如果没有任何外部源的支持,Composer可以在本地排除”。如果Github的ZIP有更多的文件,我怀疑它们是否会被删除。应该注意的是,这只适用于根包。如果包作为依赖项安装,则它将不起作用。以下是相关的GitHub问题:
"scripts": {
"post-update-cmd": [
"find vendor/ -type d -regextype posix-extended -iregex '.*/(doc|docs|example|examples|test|tests|tmp)' -print -exec rm -r {} +"
],
},