Composer: Файлы автозагрузки - сначала загрузите поставщиков

Созданный на 30 июл. 2012  ·  11Комментарии  ·  Источник: composer/composer

Я использую автозагрузку с пользовательским загрузчиком файлов. И у меня проблема, потому что мой загрузчик зависит от некоторых классов от производителей. Но композитору требуется мой загрузчик перед загрузчиком поставщика.

Вот сгенерированный autoloader.php :

<?php

// autoload.php generated by Composer
if (!class_exists('Composer\\Autoload\\ClassLoader', false)) {
    require __DIR__ . '/composer' . '/ClassLoader.php';
}

return call_user_func(function() {
    $loader = new \Composer\Autoload\ClassLoader();
    $composerDir = __DIR__ . '/composer';

    $map = require $composerDir . '/autoload_namespaces.php';
    foreach ($map as $namespace => $path) {
        $loader->add($namespace, $path);
    }

    $classMap = require $composerDir . '/autoload_classmap.php';
    if ($classMap) {
        $loader->addClassMap($classMap);
    }

    $loader->register();

    require $baseDir . '/Nella/loader.php'; // <-- my libs
    require $vendorDir . '/nette/nette/Nette/loader.php'; // <-- vendor libs

    return $loader;
});

Мне нужно загрузить _Nette_ перед моими библиотеками (_Nella_), потому что мой загрузчик (_Nella_) требует некоторых классов от _Nette_.

Самый полезный комментарий

Было бы неплохо иметь возможность определять порядок. Или даже лучше: есть дополнительная возможность определить файлы, которые необходимо загрузить в первую очередь.

Пример использования: попытка переопределить вспомогательные функции laravel, поскольку они специально определены с учетом этого, но нет способа сказать композитору, что мое определение должно предшествовать собственному laravel.

Контекст: https://laracasts.com/index.php/discuss/channels/general-discussion/override-functions-in-supporthelpersphp

Обходной путь: https://github.com/funkjedi/composer-include-files

Все 11 Комментарий

@Seldaek Я предполагаю, что порядок здесь должен соответствовать порядку, найденному при разрешении зависимостей, чтобы файл автозагрузки зависимости загружался до файла пакета, зависящего от него.

Да, это имеет смысл, не уверен, насколько легко этого добиться, хотя после первого запуска я думаю, что это довольно случайно.

Я не совсем уверен, что понимаю это? Все автозагрузчики потребуются, да и порядок тут значения не имеет?

Изменить: неважно, я понял :)

Решатель уже должен возвращать их в правильном порядке в транзакции, в том числе в случае, когда пакеты уже установлены, поэтому не уверен, почему порядок был неправильным.

Я только что столкнулся с той же проблемой с kdyby/forms-replicator

{
    "name":"kdyby/forms-replicator",
    "require":{
        "php":">=5.3.2",
        "nette/nette":"*"
    },
    "autoload":{
        "files":["Replicator.php"]
    }
}

Порядок require в autoload_real.php должен соответствовать тому, как пакеты требуют друг друга.

Слитый фикс

Как отметить, что наша библиотека должна загружаться первой?
Я имею в виду, что это не зависит от других, но его нужно сначала загрузить, прежде чем что-либо еще загрузится.

У меня тот же вопрос, что и у @onlyongunz - я глобально установил apigen/apigen и symfony/var-dumper , но когда я использую dump() версию из tracy/tracy (требуется ApiGen) называется. Я хочу использовать версию VarDumper.

Было бы неплохо иметь возможность определять порядок. Или даже лучше: есть дополнительная возможность определить файлы, которые необходимо загрузить в первую очередь.

Пример использования: попытка переопределить вспомогательные функции laravel, поскольку они специально определены с учетом этого, но нет способа сказать композитору, что мое определение должно предшествовать собственному laravel.

Контекст: https://laracasts.com/index.php/discuss/channels/general-discussion/override-functions-in-supporthelpersphp

Обходной путь: https://github.com/funkjedi/composer-include-files

Что ж, я думаю, я предлагаю load_first установить приоритет пакета при загрузке, когда он не зависит от другой библиотеки (если это не php или что-то еще), и добавлю --ignore-order чтобы игнорировать load_first .

Была ли эта страница полезной?
0 / 5 - 0 рейтинги