Composer: Carga automática de archivos: primero cargue los proveedores

Creado en 30 jul. 2012  ·  11Comentarios  ·  Fuente: composer/composer

Estoy usando la carga automática con el cargador de archivos personalizados. Y tengo un problema porque mi cargador depende de algunas clases de los proveedores. Pero el compositor requiere mi cargador antes que el cargador del proveedor.

Aquí se genera 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;
});

Necesito cargar _Nette_ antes de mis libs (_Nella_) porque mi cargador (_Nella_) requiere algunas clases de _Nette_.

Bug

Comentario más útil

Sería bueno poder definir el orden. O incluso mejor: tenga una opción adicional para definir los archivos que deben cargarse primero.

Caso de uso: intentar anular las funciones auxiliares de laravel, ya que se definen específicamente con eso en mente, pero no hay forma de decirle al compositor que mi definición debe ir antes que la nativa de laravel.

Contexto: https://laracasts.com/index.php/discuss/channels/general-discussion/override-functions-in-supporthelpersphp

Solución alternativa: https://github.com/funkjedi/composer-include-files

Todos 11 comentarios

@Seldaek Supongo que el orden aquí debe respetar el orden encontrado al resolver las dependencias, de modo que el archivo de carga automática de una dependencia se cargue antes que el archivo de un paquete que depende de él.

Sí, eso tiene sentido, no estoy seguro de lo fácil que es lograrlo, aunque después de la primera ejecución creo que es bastante aleatorio.

¿No estoy completamente seguro de entender esto? Se requerirán todos los cargadores automáticos, y entonces el orden no debería importar.

Editar: no importa, lo entiendo :)

El solucionador ya debería devolverlos en el orden correcto en la transacción, incluido el caso en el que los paquetes ya están instalados, por lo que no estoy seguro de por qué el orden sería incorrecto.

Acabo de experimentar el mismo problema con kdyby/forms-replicator

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

El orden de require en autoload_real.php debe corresponder a cómo los paquetes se requieren entre sí.

Se fusionó la solución de

¿Cómo marcar que nuestra lib debe cargarse primero?
Quiero decir, no depende de otros, pero debe cargarse primero antes de cargar cualquier otra cosa.

Tengo la misma pregunta que @onlyongunz : he instalado globalmente apigen/apigen y symfony/var-dumper , pero cuando uso la versión dump() de tracy/tracy (requerido por ApiGen) se llama. Quiero usar la versión de VarDumper.

Sería bueno poder definir el orden. O incluso mejor: tenga una opción adicional para definir los archivos que deben cargarse primero.

Caso de uso: intentar anular las funciones auxiliares de laravel, ya que se definen específicamente con eso en mente, pero no hay forma de decirle al compositor que mi definición debe ir antes que la nativa de laravel.

Contexto: https://laracasts.com/index.php/discuss/channels/general-discussion/override-functions-in-supporthelpersphp

Solución alternativa: https://github.com/funkjedi/composer-include-files

Bueno, creo que sugeriré load_first para priorizar el paquete en carga cuando no dependa de otra biblioteca (a menos que sea php o algo más), y agregaré --ignore-order para ignorar el load_first .

¿Fue útil esta página
0 / 5 - 0 calificaciones