J'utilise le chargement automatique avec un chargeur de fichiers personnalisé. Et j'ai un problème car mon chargeur dépend de certaines classes des fournisseurs. Mais le compositeur a besoin de mon chargeur avant le chargeur du fournisseur.
Voici généré 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;
});
J'ai besoin de charger _Nette_ avant mes bibliothèques (_Nella_) car mon chargeur (_Nella_) nécessite certaines classes de _Nette_.
@Seldaek Je suppose que l'ordre ici doit respecter l'ordre trouvé lors de la résolution des dépendances, de sorte que le fichier de chargement automatique d'une dépendance soit chargé avant le fichier d'un package qui en dépend.
Oui, cela a du sens, je ne sais pas à quel point c'est facile à réaliser, mais après la première manche, je pense que c'est assez aléatoire.
Je ne suis pas tout à fait sûr de comprendre cela? Tous les chargeurs automatiques seront nécessaires, puis l'ordre ne devrait pas avoir d'importance?
Edit: tant pis je comprends :)
Le solveur devrait déjà les renvoyer dans le bon ordre dans la transaction, y compris le cas où les packages sont déjà installés, donc ne savez pas pourquoi l'ordre serait incorrect.
Voici mon _composer.json_ https://github.com/nella/framework/blob/composer/composer.json
Je viens de rencontrer le même problème avec kdyby/forms-replicator
{
"name":"kdyby/forms-replicator",
"require":{
"php":">=5.3.2",
"nette/nette":"*"
},
"autoload":{
"files":["Replicator.php"]
}
}
L'ordre de require
dans autoload_real.php
doit correspondre à la manière dont les packages se nécessitent.
Correction de la @HosipLan .
Comment marquer que notre bibliothèque doit être chargée en premier?
Je veux dire, cela ne dépend pas des autres, mais il doit être chargé avant tout autre chargement.
J'ai la même question que @onlyongunz - J'ai installé globalement apigen/apigen
et symfony/var-dumper
, mais quand j'utilise la version dump()
partir de tracy/tracy
(requis par ApiGen) est appelé. Je souhaite utiliser la version de VarDumper.
Ce serait bien de pouvoir définir la commande. Ou encore mieux: vous disposez d'une option supplémentaire pour définir les fichiers qui doivent être chargés en premier.
Cas d'utilisation: essayer de remplacer les fonctions d'assistance de laravel car elles sont spécifiquement définies dans cet esprit, mais il n'y a aucun moyen de dire au compositeur que ma définition doit venir avant celle native de laravel.
Solution de contournement: https://github.com/funkjedi/composer-include-files
Eh bien, je pense que je vais suggérer load_first
de prioriser le paquet lors du chargement quand il ne dépendait pas d'une autre liblary (sauf si c'est php ou autre chose), et ajouter --ignore-order
pour ignorer le load_first
.
Commentaire le plus utile
Ce serait bien de pouvoir définir la commande. Ou encore mieux: vous disposez d'une option supplémentaire pour définir les fichiers qui doivent être chargés en premier.
Cas d'utilisation: essayer de remplacer les fonctions d'assistance de laravel car elles sont spécifiquement définies dans cet esprit, mais il n'y a aucun moyen de dire au compositeur que ma définition doit venir avant celle native de laravel.
Contexte: https://laracasts.com/index.php/discuss/channels/general-discussion/override-functions-in-supporthelpersphp
Solution de contournement: https://github.com/funkjedi/composer-include-files