如何使用自己的作曲家自动加载另一个软件包



编辑重要说明:我要包含的软件包不使用作曲家自动加载。我必须使用他们的骇客,我想避免。

我知道作曲家主要是如何工作的,我有一个可以是依赖项的软件包(这很重要,我知道如何在一个项目中将这项工作做到,但这不是我要问的(。

我需要什么?

  1. 有人需要我的包裹

    作曲家需要tomas/my-package

  2. 它将安装

  3. 它将使用PSR-4

  4. 自动加载我的包装
  5. 它将自动加载第三方软件包以及

我已经尝试了这样的事情:

"autoload": {
    "psr-4": {
        "MyPackage\": "src",
        "PHP_CodeSniffer\": "../../squizlabs/php_codesniffer/src"
    }
}

我在我的一个依赖项中尝试过,它不起作用:(。

另外,我已经与包装作者进行了交谈,他不想使用作曲家自动加载。他更喜欢自己的。

感谢您的任何帮助!

如果这些答案与我解决的问题有关,则没有,所以我尝试发布最佳解决方案到目前为止

我在Phpstan中受到了启发,该phpstan对自动加载目录的心情受到了启发,这些目录在作曲家中被错过(实际上是同一问题(。

我已经添加了Robotloader

composer require nette/robot-loader

然后使用静态方法创建LegacyCompatibility类:

use NetteLoadersRobotLoader;
// ...
public static function autoloadCodeSniffer(): void
{
    $robotLoader = new RobotLoader;
    $robotLoader->acceptFiles = '*.php';
    $robotLoader->setTempDirectory(sys_get_temp_dir() . '/_robot_loader');
    $robotLoader->addDirectory(getcwd() . '/vendor/squizlabs/php_codesniffer/src');
    $robotLoader->register();
}

,我在需要时称其为

LegacyCompatibility::autoloadCodeSniffer()

工作就像魅力。但仍开放到更好的解决方案 1!

github永久链接

您在 composer.json文件中做一个大型禁忌:您正在定义不在软件包中的代码的自动加载。

这将失败,正如您已经发现的那样。

,我想知道您为什么要努力集成PHP代码网络,因为该软件包具有工作自动加载定义。您需要做的就是"require": { "squizlabs/php_codesniffer": "^3.0@RC" }(如果您真的需要最新的3.x版本候选者,否则^2.8.0将是一个更好的主意(。

如果您需要php_codesniffer,而不是以某种方式在自动加载中引用它,则作曲家将尽一切努力集成该软件包:下载它,将其添加到自动加载器中,并在必要时运行它的代码。任何根据您的包裹的人也将安装此依赖。

您唯一的问题是"它不起作用" ,这是对问题的充分描述,因为您缺乏描述您在代码中所做的事情,以及您收到的错误消息。还要说明您期望发生的事情,以及发生的事情(以及如果这不明显的话,这如何偏离您的期望(。

相关内容

  • 没有找到相关文章

最新更新