2013-05-06 86 views
8

我設置了兩個項目,一個'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中。

@謝爾達克 - 謝謝你提出我的滿意配置是問題,我希望這能夠澄清我/我所處位置的任何其他人的滿意/作曲家行爲。

回答

5

我看到了兩個可能的錯誤,你可以這樣做,將導致此:

  • 你忘了更新您的SATIS回購​​所以LXP /初始化自動加載的配置是不是最新的在那裏
  • 你正在從鎖定文件運行作曲家安裝,這意味着作曲家只是從composer.lock文件讀取信息,並且不會將套件元數據更新爲可用的最新版本。爲了解決這個問題,你應該運行作曲家更新
+0

@Seladek - 我SATIS產生packages.json不包含任何自動加載信息,是否應該?自從圖書館的自動加載信息被添加以來,它已經被重新生成。由於這是一個測試平臺項目,我在運行之間完全拆除作曲家,刪除composer.lock和供應商目錄並重新運行作曲家安裝。 – bmcgavin 2013-05-07 08:12:26

+0

@Seladek - 但是,我可以確認將自動載入信息直接添加到packages.json中是否具有預期的效果。現在編輯原始問題。 – bmcgavin 2013-05-07 08:41:01

+1

我認爲現在的答案取決於你如何配置滿意。如果你使用「type」:「package」,那麼你可能不應該這樣做,因爲它只能用於沒有composer.json的代碼。如果是這樣,你應該使用類型「vcs」,然後它會掃描git倉庫的composer.json,並在生成的packages中正確包含autoload信息。 – Seldaek 2013-05-07 13:21:45

2

嘗試composer dump-autoload命令。

0

這取決於你如何通過作曲家安裝你的圖書館。例如,如果您將其下載爲package類型(與我相信composer類型相同),因爲作曲者從不讀取composer.json,您需要使用vcs類型。請參閱:GH-6846

這裏是composer.json這應該工作:

{ 
    "require": { 
    "lxp/library": "dev-master" 
    }, 
    "repositories": [ 
    { 
     "type": "vcs", 
     "url": "http://satis.repo.redacted/" 
    } 
    ] 
} 

然後運行:composer install

爲了排除故障,嘗試運行:

  • composer dump-autoload -o -vvv
  • composer diagnose -vvv