我設置了兩個項目,一個'init'和一個庫,這是init所需要的。它們都設置了PSR-0自動加載,但庫中的自動加載值不會添加到init項目中的vendor/composer/autoload_namespaces.php。從圖書館作曲家不生成自動加載庫
樣品composer.json:從項目
{
"name": "lxp/library",
"description": "A test library",
"autoload": {
"psr-0": {
"LXP\\Library": "src/"
}
}
}
樣品composer.json要求該庫:
{
"name": "lxp/init",
"name": "A test init",
"autoload": {
"psr-0": {
"LXP\\Init": "src/"
}
},
"repositories": [
{
"type": "composer",
"url": "http://satis.repo.redacted/"
}
],
"require": {
"lxp/library": "dev-master"
}
}
庫中包含的類LXP \圖書館\東西文件src/LXP/Library/Something.php。
需要該庫的項目包含文件src/LXP/Init/Now.php中的類LXP \ Init \ Now。
在'init'項目中運行composer install時,它會下載庫項目並將其正確放入供應商,但vendor/composer/autoload_namespaces.php不包含庫的自動載入信息,僅包含當前項目的信息。
我在做什麼錯?如果我在庫項目中運行dump-autoload,那麼autoload_namespaces.php文件是正確的,並且一個快速啓動腳本確認它確實拿起了類。
編輯 - 這是令人滿意的packages.json的問題。爲了解決這個問題,我必須將庫的composer.json中的自動加載信息添加到我提供的json文件中,這似乎是不必要的重複,所以我可能做錯了。是否有一個地方可以存儲自動加載信息以滿足庫?例如,可以滿足讀取它掃描庫中存在的composer.json文件嗎?
編輯#2 - Satis不讀取指定爲'package'類型的存儲庫中的composer.jsons。事後看來,這是顯而易見的,因爲'package'用於沒有composer.json的庫,並且是一種包裝類似composer的依賴關係管理的方法。
將satis.json的存儲庫更改爲'vcs'類型意味着讀取了composer.json,並且信息(包括自動載入規範)被解析並存儲在packages.json中。
@謝爾達克 - 謝謝你提出我的滿意配置是問題,我希望這能夠澄清我/我所處位置的任何其他人的滿意/作曲家行爲。
@Seladek - 我SATIS產生packages.json不包含任何自動加載信息,是否應該?自從圖書館的自動加載信息被添加以來,它已經被重新生成。由於這是一個測試平臺項目,我在運行之間完全拆除作曲家,刪除composer.lock和供應商目錄並重新運行作曲家安裝。 – bmcgavin 2013-05-07 08:12:26
@Seladek - 但是,我可以確認將自動載入信息直接添加到packages.json中是否具有預期的效果。現在編輯原始問題。 – bmcgavin 2013-05-07 08:41:01
我認爲現在的答案取決於你如何配置滿意。如果你使用「type」:「package」,那麼你可能不應該這樣做,因爲它只能用於沒有composer.json的代碼。如果是這樣,你應該使用類型「vcs」,然後它會掃描git倉庫的composer.json,並在生成的packages中正確包含autoload信息。 – Seldaek 2013-05-07 13:21:45