Composer: 自动加载文件-首先加载供应商

创建于 2012-07-30  ·  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;
});

我需要在库(_Nella_)之前加载_Nette_,因为(_Nella_)加载器需要_Nette_中的某些类。

最有用的评论

能够定义顺序会很好。 甚至更好:有一个额外的选项来定义需要首先加载的文件。

用例:考虑到具体定义的laravel辅助函数,尝试覆盖它们,但是无法告诉作曲家我的定义必须在laravel的本机函数之前。

内容: https

解决方法: https

所有11条评论

@Seldaek我想这里的顺序应该遵循解析依赖项时发现的顺序,以便依赖项的自动加载文件在依赖于该文件的软件包文件之前加载。

是的,这很有道理,虽然在第一次运行之后我不确定是多么随机,但不确定实现起来有多么容易。

我不完全确定我明白了吗? 将需要所有自动装带器,然后顺序应该没关系吗?

编辑:没关系,我明白了:)

求解程序应该已经在事务中以正确的顺序返回了这些,包括已经安装软件包的情况,因此不确定为什么顺序不正确。

我刚刚遇到了kdyby/forms-replicator的相同问题

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

顺序requireautoload_real.php应与包装如何需要对方。

合并@HosipLan的修复程序。

如何标记应该首先加载我们的库?
我的意思是,它不依赖于其他对象,但是应该先加载它,然后再加载其他东西。

我作为@onlyongunz同样的问题-我已经在全球安装了apigen/apigensymfony/var-dumper ,但是当我使用dump()从版本tracy/tracy (由ApiGen要求)叫做。 我想使用VarDumper的版本。

能够定义顺序会很好。 甚至更好:有一个额外的选项来定义需要首先加载的文件。

用例:考虑到具体定义的laravel辅助函数,尝试覆盖它们,但是无法告诉作曲家我的定义必须在laravel的本机函数之前。

内容: https

解决方法: https

好吧,我认为我将以load_first作为优先级,以便在不依赖其他库的情况下优先加载该包(除非它是php或其他),然后添加--ignore-order来忽略load_first

此页面是否有帮助?
0 / 5 - 0 等级