Composer忽略包上的文件夹要求

时间:2015-07-13 18:06:11

标签: composer-php directory ignore

我想使用带有composer require的包,但我不希望它加载所有文件夹。我知道我应该在github上分配这个包并进行更改,但我想在需要时轻松更新包,复制/粘贴文件夹不是最好的选择。

所以,我在想,是否有可能在我composer.json文件的分叉存储库上,告诉我不想加载EloquentConsole个文件夹illuminate/database包裹?

参考:https://github.com/illuminate/database

1 个答案:

答案 0 :(得分:2)

首先,无法从Composer中排除这些文件夹。

我永远不会理解为什么有些人仍在寻找最后2个字节的磁盘空间。如今磁盘空间真的很便宜。 例如,你永远不会去删除一些你没有在包中使用的单个函数,或者你呢?

在我使用的几乎所有软件包/框架中,都有一些我不会使用的东西,但除非我是一个将我的代码发送给Pluto或其他东西的美国宇航局人员,否则它永远不会出现在我的脑海中。

我的建议:保留这些文件,除非非常需要删除这些文件。

如果您需要删除它们,您可以编写脚本并在post-package-update事件中运行它。

以下是您在composer.json中定义脚本事件的方法:

{
    "scripts": {
        "post-update-cmd": "MyVendor\\MyClass::postUpdate",
        "post-package-install": [
            "MyVendor\\MyClass::postPackageInstall"
        ],
        "post-install-cmd": [
            "MyVendor\\MyClass::warmCache",
            "phpunit -c app/"
        ],
        "post-create-project-cmd" : [
            "php -r \"copy('config/local-example.php', 'config/local.php');\""
        ]
    }
}

MyVendor\MyClass类的示例:

<?php

namespace MyVendor;

use Composer\Script\Event;
use Composer\Installer\PackageEvent;

class MyClass
{
    public static function postUpdate(Event $event)
    {
        $composer = $event->getComposer();
        // do stuff
    }

    public static function postPackageInstall(PackageEvent $event)
    {
        $installedPackage = $event->getOperation()->getPackage();
        // do stuff
    }

    public static function warmCache(Event $event)
    {
        // make cache toasty
    }
}

有关如何使用脚本的更多信息,请参阅official composer documentation - scripts