如何使用Composer忽略目录?

时间:2013-06-11 16:35:03

标签: composer-php

我想发布一个PHP库并在Packagist上提交,以便通过Composer安装它。

我的图书馆有以下结构:

lib/
tests/
composer.json
README.md

基本上,每当我在项目的composer.json中包含这个库时,我都想要复制除tests目录之外的所有内容,这很麻烦,只有在开发库时才需要本身。否则这只是浪费空间(特别是在将项目包装到生产中时)。

是否可以从库的composer.json

中排除此目录

4 个答案:

答案 0 :(得分:28)

这在Composer中是不可能的。但是,有一些方法可以做到这一点:

  • 当您使用--prefer-dist运行更新或安装命令时,Composer会尝试在github上下载存档。您可以将该文件放在项目根目录中的.gitattributes文件中,从文件中删除测试目录:

    Tests/ export-ignore
    
  • Composer只会使用github上的标签。只是在创建标记时临时删除测试目录也可以解决问题。

答案 1 :(得分:8)

可以通过在composer.json密钥中的archive文件中添加排除模式来控制存档创建。有关详细信息,请参阅https://getcomposer.org/doc/04-schema.md#archive

给出的例子(引自上面的URL):

{
    "archive": {
        "exclude": ["/foo/bar", "baz", "/*.test", "!/foo/bar/baz"]
    }
}
  

该示例将包含/dir/foo/bar/file/foo/bar/baz/file.php/foo/my.test,但会排除/foo/bar/any/foo/baz和{{1 }}

通过这种方式,您可以获得与/my.test相同的控件,而无需使用Git或影响在所述文件中需要不同设置的任何进程。

答案 2 :(得分:1)

自2015年11月11日起,https://getcomposer.org/doc/04-schema.md#exclude-files-from-classmaps

已成为可能

来源:https://github.com/composer/composer/issues/4456#issuecomment-155825777

编辑:误解。以上只允许自动加载器忽略指定的路径,它实际上并不会阻止它们在安装时被复制到文件系统。

答案 3 :(得分:0)

可以使用post-update-cmd键中的composer.json scripts文件来自动执行此操作:

"scripts": {
    "post-update-cmd": [
        "rm -rf vendor/aura/intl/tests vendor/cakephp/cakephp/tests"
    ],
},