Composer 自动加载 类 TYPO3 扩展,无需任何自动加载配置

Composer autoloads classes of TYPO3 extension without any autoload configuration

为什么下面的根 composer.json 导致 vendor/composer/autoload_classmap.php 包含 Smarty 的 classes 的所有 class 映射 – 虽然 composer.json typo3-ter/smarty 没有任何 autoload 配置?

{
  "repositories": [
    {
      "type": "composer",
      "url": "https://composer.typo3.org"
    }
  ],
  "require": {
      "typo3/cms": "^6.2",
      "typo3-ter/smarty": "2.1.2"
  }
}

一些背景信息:

https://composer.typo3.org 是一个 composer 存储库,它使 legacy TYPO3 Extension Repository (TER) 扩展可以通过 composer 安装。因为 TER 扩展没有供应商名称,所以 所有 它们共享同一个供应商,即 "typo3-ter".

此(遗留)作曲家存储库是使用 TER 的元信息(对其他 TER 扩展和 TYPO3 版本的依赖性、作者、描述……)构建的。

为了使这个存储库对最终用户更有用,尤其是因为 TYPO3 >7.6 在通过 composer 安装时完全依赖于 composer 自动加载器,complete extension directory 被添加到 composer 类映射中。否则,扩展 类 根本无法加载,无需任何额外配置。

因为这会引起麻烦,所以我教 TER 从 composer.json 中获取部分信息,以防此文件存在。这意味着 if a composer.json is present and it contains an autoload section, 此部分用于生成此扩展的自动加载信息关于作曲家。typo3.org

关于 smarty 扩展:

令人惊讶的是,这个扩展已经有了一个 composer.json 文件。但它坏了。首先也是最重要的:它错过了自动加载信息,尽管它显然有 类 可用。由于缺少自动加载信息,composer.typo3.org 包生成器将完整目录添加为类映射。

如果这会造成麻烦(你从未提到过,但我认为是这样),你应该将 repo 作为类型 "vcs" 直接添加到你的 composer.json 并要求 "rtp/smarty" 而不是 "typo3-ter/smarty".

或者你要求作者修复 composer.json 并上传新版本到 TER,或者直接在 packagist.org

上注册那个包更好