2013-07-25 50 views
5

我有這個composer.json文件如何使用Composer加載我自己的供應商文件夾?

{ 
    "require": { 
     "filp/whoops": "1.*" 
    } 
} 

但是,我有我自己的項目稱爲vendor/imaqtpie/framework/src的文件夾。這不是託管在任何地方,所以如果我做composer update更新自動加載文件,它會給出錯誤。

The requested package "imaqtpie/framework" could not be found in any version, there may be a typo in package name. 

我不得不自己添加這個來自動加載文件,使其工作。

'Framework' => array($vendorDir . '/imaqtpie/framework/src') 

有什麼辦法解決這個問題嗎?

我想告訴Composer,無論檢查服務器/版本,每次都必須自動加載此本地供應商文件夾,或者因爲我是新作曲家,所以尋找更優雅的解決方案。

回答

2

你必須用你的包代碼創建你自己的本地git倉庫來實現它。 之後,把這樣的東西放入您的composer.json文件中。

"repositories": [ 
    { 
     "type":"vcs", 
     "url":"/path/to/your/source" 
    } 
], 

"require":{ 
    "filp/whoops":"dev-master" 
} 

自動加載不應該是一個問題,如果你實現它這樣...

+0

這是正確的答案。您不應該版本控制您的'vendor'文件夾,因此最好爲要添加到供應商文件夾的代碼進行回購,並通過作曲者將其添加。 –

0

有你可以做到這一點的幾種方法。

1. 我會說最正確的方法,就是託管它並使用Satis來生產私人「包裝師」。然後,作曲家將表現「正常」並獲得最新版本,進行版本檢查等,但你說你不關心這一點。

如果你想了解更多的細節,我可以擴展這個,我已經建立了很多令人滿意的包,它工作得很好。 (請注意,這裏還有我尚未試用過的新商用Toran代理服務器。)

2. 如果您的'imaqtpie'圖書館是一個虛假的供應商圖書館(聽起來您只是有一些文件存儲在那裏,就像你會老式的包含庫一樣),那麼你可以簡單地使用一個classmap來將自動加載器指向你的頂級應用程序中的那個文件夾。這隻有在您的頂級應用程序中包含該文件夾時纔有意義。

所以,你的應用程序的作曲家JSON可能看起來像:

{ 
    "require": { 
     "filp/whoops": "1.*" 
    }, 
    "autoload": { 
     "classmap":[ 
      "vendor/imaqtpie/framework/src" 
     ] 
    } 
} 

所以這告訴作曲家有該文件夾在一堆類。當您運行composer dump-autoload時,它將掃描該文件夾並生成vendor/composer/autoload_classmap.php並列出所有文件。

這不是你應該如何使用作曲家,但你並沒有要求使用作曲家的包管理,你問如何使用作曲家的自動加載器,我想這很好!只要你瞭解風險。

3. 如果你的包或者是PSR0或4(這聽起來可能從「源」文件夾),那麼你同樣做到這一點在你的頂級應用:

{ 
    "require": { 
     "filp/whoops": "1.*" 
    }, 
    "autoload": { 
     "psr-4":{ 
      "Imaqtpie\\Framework\\":"vendor/imaqtpie/framework/src" 
     ] 
    } 
} 

這又是有點奇怪,但應該工作!

通常情況下,你會在你的封裝的 composer.json指定此路徑,然後當你做一個更新它被合併到composer.lock然後vendor/composer/installed.json(這是用於轉儲自動載入源)。但理論上你可以從頂級應用程序加載任何你想要的東西,因此你可以將一個包「硬編碼」到供應商庫和類路徑中去。

我可能會推薦不是這樣做雖然!供應商文件夾是一個脆弱的位置,大多數人和程序會假設可以隨時銷燬和重建。所以這是一個危險的地方存儲任何不在包裝中的東西。對於其他任何假設相同的開發者來說,這也是令人困惑的。

因此,我建議您將庫移動到遠離供應商文件夾的其他位置,例如'lib',然後使用上面的classpath方法將其包含在自動加載器中。

相關問題