使用不包含文件的Composer自动加载器

我有一个传统项目,它使用“自动加载”定义中的“文件”部分进行一些初始化。这个初始化取决于一些框架。我想要做的是让这个代码库的少量单元测试可以运行,而不需要框架出现。我的遗留项目的代码通过“autoload”中的“psr-4”和“classmap”组合加载。此外,这个项目依赖于通过Composer加载的一些库。使用不包含文件的Composer自动加载器

这意味着我不能像我通常那样在自己的测试引导中包含作曲家自动加载器(vendor/autoload.php)。我已经在包括vendor/composer中的类图,命名空间和psr-4加载器,尽管在Composer代码中进行了一些挖掘后发现并不那么简单。

使用Composer生成的自动加载器时是否有一种比较有道理的方式,而不包含“自动加载”部分中定义的“文件”?

回答:

虽然不是一个很好的解决方案,但您可以自己创建一个Composer自动加载器的实例,并自己注册psr-4,classmap和psr-0定义。

假设测试的引导是在你的项目根目录的子目录,下面的代码应该工作:

require __DIR__ . '/../vendor/composer/ClassLoader.php'; 

call_user_func(function() {

$loader = new \Composer\Autoload\ClassLoader();

foreach (require __DIR__ . '/../vendor/composer/autoload_namespaces.php' as $namespace => $path) {

$loader->set($namespace, $path);

}

foreach (require __DIR__ . '/../vendor/composer/autoload_psr4.php' as $namespace => $path) {

$loader->setPsr4($namespace, $path);

}

$classMap = require __DIR__ . '/../vendor/composer/autoload_classmap.php';

if ($classMap) {

$loader->addClassMap($classMap);

}

$loader->register(true);

});

这不会利用从作曲自动加载“静态变量初始化”的代码路径。据我所知,这只是为了优化目的,所以这不应该成为测试的问题。

以上是 使用不包含文件的Composer自动加载器 的全部内容, 来源链接: utcz.com/qa/263045.html

回到顶部