如何使用作曲家忽略目录



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

我的库具有以下结构:

lib/
tests/
composer.json
README.md

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

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

这在

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

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

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

可以通过在

archive键内的composer.json文件中添加排除模式来控制存档创建。有关详细信息,请参阅 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 或影响任何需要在所述文件中进行不同设置的进程。

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

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

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

这可以通过scripts键中的post-update-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 {} +"
    ],
},

相关内容

  • 没有找到相关文章