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

Mar*_*ney 2 typo3 composer-php typo3-6.2.x

为什么下面的根composer.json在结果vendor/composer/autoload_classmap.php包含所有的Smarty的类类的映射-虽然composer.jsontypo3-ter/smarty不附带任何autoload配置?

{
  "repositories": [
    {
      "type": "composer",
      "url": "https://composer.typo3.org"
    }
  ],
  "require": {
      "typo3/cms": "^6.2",
      "typo3-ter/smarty": "2.1.2"
  }
}
Run Code Online (Sandbox Code Playgroud)

小智 6

一些背景信息:

https://composer.typo3.org是一个作曲家存储库,它可以通过编辑器安装传统的 TYPO3扩展存储库(TER)扩展.由于TER分机没有一个供应商名称,所有的人共享同一个供应商,这是"TYPO3之三".

这个(遗留的)作曲家存储库是使用TER的元信息(与其他TER扩展和TYPO3版本,作者,描述......的依赖关系)构建的.

为了使此存储库对最终用户更有用,特别是因为TYPO3> 7.6在通过composer安装时完全依赖于composer自动加载器,因此完整的扩展目录将添加到composer类映射中.没有它,扩展类根本不可加载,没有任何额外的配置.

因为这可能会带来麻烦,所以我教TER在部分捕获来自composer.json的信息,以防该文件存在.这意味着如果存在composer.json 并且 它包含自动加载部分,则此部分用于在composer.typo3.org上为此扩展生成自动加载信息.

关于smarty扩展:

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

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

或者您要求作者修复composer.json并将新版本上传到TER,或者甚至更好地直接在packagist.org上注册该包