作曲家忽略包要求的文件夹

Composer ignore folders on package require

我想使用带有 composer require 的包,但我不希望它加载所有文件夹。我知道我应该在 github 上分叉此包并进行更改,但我想在需要时轻松更新包,而 copy/pasting 文件夹不是最佳选择。

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

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

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

而且我永远不会理解为什么有些人仍在寻找磁盘的最后 2 个字节 space。 Disk space 现在真的很便宜。 例如,您永远不会从包中删除一些您不使用的单一功能,或者您呢?

在我使用的几乎所有 package/framework 中,有些东西我不使用,但我永远不会想到删除它们,除非我是 NASA 人员将我的代码发送到 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 class 的示例:

<?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