2013-02-22 93 views
4

我正在使用作曲家來處理一些依賴項目,但我得到了一個非常奇怪的問題。 Composer忽略子包中包含的composer.json文件。作曲家忽略郵編依賴'composer.json文件

我的項目需要檢索一些自定義zip包,在這些包中,composer.json文件定義了其他需求。這些需求的存儲庫在根composer.json文件中聲明,因爲Composer無法遞歸提取存儲庫。

的事情是,我的壓縮包下載後,解壓並放置在供應商目錄,作曲家完全忽略其composer.json有其他要求的定義...

zip存檔是這樣的:

  • /DIR1
  • /DIR2
  • file1的
  • file2的
  • composer.json

爲了給你一個想法,這是我的根composer.json看起來像:

{ 
    "name": "myproject/project", 
    "type": "library", 
    "repositories": [  
     { 
     "packagist" : false 
     }, 
     { 
      "type": "package", 
      "package": { 
       "name" : "giulianobundles/mybundle", 
       "version" : "1", 
      "dist": { 
       "url": "http://url/to/zip/file", 
        "type": "zip" 
       } 
      } 
     }, 
     { 
      "type": "package", 
      "package": { 
       "name" : "giulianobundles/mybundlerequirement", 
       "version" : "1", 
     "dist": { 
        "url": "http://url/to/zip/file", 
       "type": "zip" 
     }, 
     } 
    }, 
    ], 
    "require": { 
     "php": ">=5.3.2", 
     "giulianobundles/mybundle": "*"    
    }, 
    "autoload": { 
     "psr-0": { 
      "config": "./" 
     } 
    }, 
} 

和包的composer.json包看起來像

{ 
    "name": "giulianobundles/mybundle", 
    "type":"library", 
    "require": { 
     "giulianobundles/mybundlerequirement": "1" 
    } 
} 

Mybundle包成功安裝,但其composer.json文件完全被忽略。任何想法?我錯過了什麼?

回答

5

事實上,Composer不會遞歸查看文件系統中的composer.json文件。它需要查看存儲庫中的composer.json文件。它通常工作的方式是一個包在某個地方有一個git或svn URL。 Composer將直接從存儲庫中獲取git://<host>/<package>/composer.json,以便在安裝之前計算出該包的依賴關係,以計算整體依賴關係。

對於您的情況,您正在自己的composer.json文件中內嵌定義package。這用於而不是依賴項中的composer.json文件。這意味着Composer將"package": { ... }作爲該包的標準composer.json文件,它不會查看代碼本身;特別是在解包之後。它將Zip文件視爲沒有自己的composer.json文件。

定義"package": { ... }中的依賴關係或將代碼託管在版本控制系統中,Composer可以從該版本控制系統獲取composer.json文件。

+0

太棒了!爲了知道這件事是在作曲家文檔中寫的,我真的非常想知道這件事,我真的非常想知道這件事嗎?因爲我真的找不到它了--.-' Regards, – 2013-02-22 13:36:01

+0

嗯,好問題。我不完全確定這一點在任何地方都可以精確地解釋,但我希望它以某種形式表達。這應該是一個大紅旗:*「package:如果你依賴的是一個沒有任何支持composer的項目,你可以使用'package'庫來內聯定義這個包,你基本上只是將'composer.json 'object。「* http://getcomposer.org/doc/04-schema.md#repositories – deceze 2013-02-22 14:11:48