2016-11-11 100 views
2

爲什麼下面的根composer.json結果包含所有的Smarty的類類映射的vendor/composer/autoload_classmap.php - 雖然typo3-ter/smartycomposer.json不附帶任何autoload配置?作曲家自動加載類TYPO3擴展,沒有任何自動加載配置

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

回答

6

一些背景信息:

https://composer.typo3.org是作曲家儲存庫,它使遺留 TYPO3擴展庫(TER)的擴展是通過作曲家安裝。由於TER擴展沒有供應商名稱,因此所有的共享同一供應商,即「typo3-ter」。

此(傳統)作曲家存儲庫是使用來自TER的元信息(對其他TER擴展和TYPO3版本,作者,說明的依賴關係)構建的。

爲了使這個存儲庫對最終用戶更有用,特別是因爲TYPO3> 7.6在通過作曲者安裝時完全依賴於作曲家自動加載器,所以complete extension directory被添加到作曲家classmap中。沒有這些,擴展類就根本無法加載,沒有任何額外的配置。

因爲這可能會導致麻煩,所以我教TER從composer.json中部分捕獲信息,以防該文件存在。這意味着如果一個 composer.json存在it contains an autoload section,這部分用於產生上composer.typo3.org

關於smarty的擴展該擴展的自動加載信息:

令人驚訝的該擴展已經有一個composer.json文件。但它被打破了。首先也是最重要的一點:它忽略了自動加載信息,儘管它顯然具有可用的類。由於缺少自動加載信息,composer.typo3.org軟件包生成器將完整的目錄添加爲classmap。

如果這導致麻煩(您從未提及過,但我認爲是這樣),您應該直接將repo作爲類型「vcs」添加到您的composer.json,並且需要「rtp/smarty」而不是「typo3-ter /智者」。

或者你問筆者修復composer.json並上傳新版本TER,甚至更好的直接註冊在packagist.org該包

+0

THX。我是否理解正確? TYPO3 CMS Composer軟件包生成器生成一個'packages.json'和類似'all $ 0877d76abecf1f9f1412fa11915899533a4475b3.json'的文件,這些文件由Composer在'composer update'上下載(真的是36mb)。這些文件包含用於爲我的項目構建Composer自動加載器的自動加載配置。 TYPO3擴展的'composer.json'中的'autoload'部分在'composer update'上根本不會被考慮 - 它是所有$ 0877d76abecf1f9f1412fa11915899533a4475b3.json'中的信息。對? –

+0

是的,該package.json是生成的,作曲家需要下載完整的文件。有一個更新正在等待優化https://github.com/TYPO3/CmsComposerPackageGenerator/pull/19然而,由於服務器上的PHP版本較低,目前無法完成此更新。 – helhum

+0

是的,這個文件包含了作曲家所需要的所有信息,包括自動加載信息。對於「typo3-ter」軟件包沒有其他評估。 但是,現在已經有相當一段時間了作曲家的自動加載部分。在構建這些信息時,對擴展**中的json進行**評估。因此,這部分的composer.json是**不會被忽略 – helhum