32

我想发布一个 PHP 库并将其提交到Packagist以通过Composer安装它。

我的图书馆具有以下结构:

lib/
tests/
composer.json
README.md

基本上,每当我在项目中包含这个库时composer.json,我都希望复制除tests目录之外的所有内容,这很麻烦,只有在开发库本身时才需要。否则只会浪费空间(尤其是在打包项目以进行生产时)。

是否可以将此目录从库中排除composer.json

4

4 回答 4

34

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

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

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

于 2013-06-12T15:34:13.143 回答
16

可以通过在密钥中的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/my.test

这样,您就可以拥有与您相同的控制权.gitattributes,而无需使用 Git 或影响任何需要在所述文件中进行不同设置的进程。

于 2018-02-19T15:56:25.140 回答
2

自 2015 年 11 月 11 日以来,这已成为可能,使用https://getcomposer.org/doc/04-schema.md#exclude-files-from-classmaps

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

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

于 2016-10-25T22:40:48.220 回答
1

这可以使用密钥post-update-cmd中的composer.json文件自动执行:scripts

"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 {} +"
    ],
},
于 2019-09-27T13:54:54.307 回答