如何检查是不是正在使用作曲家的自动加载器?

Posted

技术标签:

【中文标题】如何检查是不是正在使用作曲家的自动加载器?【英文标题】:How to check if composer's autoloader is being used?如何检查是否正在使用作曲家的自动加载器? 【发布时间】:2017-08-18 01:29:49 【问题描述】:

我正在为 WordPress 开发一个特定的 php 框架,我想让我的用户选择使用 composer 将其安装为一个包,或者手动安装它。如果使用了 composer,那么 psr-4 类自动加载器会处理所有事情。如果不是,则必须在框架的引导过程中手动加载所有文件。

有没有一种安全的方法来检查 composer 的自动加载器是否正在给定的 WordPress 环境中使用?

目前我正在使用:

if( !class_exists('Composer\\Autoload\\ClassLoader') )

    // Manually include files if composer is not used.
    require_once 'some/files.php';

但是,如果在给定的 WordPress 环境中有一个在内部使用 composer 的插件,那么上面的 if 语句将返回 true,即使其他插件无法访问它。

【问题讨论】:

“全局”作曲家自动加载器位置是否在可重复的位置? @RobertDeBoer 不,不是。它可以同时存在于多个位置。 【参考方案1】:

事实证明,解决方案非常简单。您需要创建 2 个不同的引导文件,例如 manual-bootstrap.phpcomposer-bootstrap.php。然后将以下行添加到composer.json

"autoload": 
    "files": ["composer-bootstrap.php"]

composer-bootstrap.php 只有在使用 composer 将框架加载为依赖项时才会被调用。想要手动加载框架的用户将使用manual-bootstrap.php

【讨论】:

【参考方案2】:
if(class_exists("\Composer\Autoload\ClassLoader"))

  // a composer autoload.php has already been included/required

【讨论】:

以上是关于如何检查是不是正在使用作曲家的自动加载器?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 laravel 中要求作曲家自动加载器?

PHP使用来自作曲家的自动加载器添加自定义命名空间

作曲家自动加载器 psr-0 命名空间

fuelphp找不到作曲家自动加载器

如何使用 Composer 从供应商外部自动加载类?

Composer 自动加载始终是第一位的