2013-10-18 52 views
0

我叉了https://github.com/jasonlewis/basset,現在正在嘗試將我的分叉添加到我的項目中。但是我運行composer update後,似乎沒有看到我分叉的composer.json文件,爲什麼?我究竟做錯了什麼?自定義存儲庫不會讀取我的composer.json?

我已經添加了這個repositoryrequire: {}

"repositories": [ 
{ 
    "type":"package", 
    "package": { 
     "name": "marwelln/basset", 
     "version":"master", 
     "source": { 
      "url": "https://github.com/Marwelln/basset.git", 
      "type": "git", 
      "reference":"master" 
     } 
    } 
} 
], 

我分叉composer.json看起來像這樣(沒有從原來的改變,除了名稱):

{ 
    "name": "marwelln/basset", 
    "description": "A better asset management package for Laravel.", 
    "keywords": ["assets", "basset", "laravel"], 
    "license": "BSD-2-Clause", 
    "authors": [ 
     { 
      "name": "Jason Lewis", 
      "email": "[email protected]" 
     } 
    ], 
    "require": { 
     "php": ">=5.3.0", 
     "kriswallsmith/assetic": "1.1.*" 
    }, 
    "require-dev": { 
     "mockery/mockery": ">=0.7.2", 
     "illuminate/config": "4.0.*", 
     "illuminate/console": "4.0.*", 
     "illuminate/filesystem": "4.0.*", 
     "illuminate/log": "4.0.*", 
     "illuminate/routing": "4.0.*", 
     "illuminate/support": "4.0.*", 
     "symfony/process": "2.3.*" 
    }, 
    "suggest": { 
     "aws/aws-sdk-php": "Deploy static assets directly to your S3 buckets.", 
     "rackspace/php-cloudfiles": "Deploy static assets directly to your Cloud Files container." 
    }, 
    "autoload": { 
     "psr-0": { 
      "Basset": "src/" 
     }, 
     "classmap": [ 
      "tests/Cases/FilterTestCase.php" 
     ], 
     "files": ["src/helpers.php"] 
    }, 
    "extra": { 
     "branch-alias": { 
      "dev-master": "4.0-dev" 
     } 
    }, 
    "minimum-stability": "dev" 
} 

這樣,Basset命名空間沒有註冊autoload_namespace.php也沒有得到"kriswallsmith/assetic": "1.1.*",但如果我使用原來的require: { "jasonlewis/basset" : "dev-master"}它增加它就好了。我錯過了什麼?

回答

0

我改變repository這樣:

"repositories": [ 
{ 
    "type":"vcs", 
    "url": "https://github.com/Marwelln/basset" 
} 
], 

,然後用於jasonlewis/basset代替marwelln/basset。它現在正在工作。

1

你已經完成了一些被認爲不是Composer最佳實踐的東西。

首先,您應該儘量避免將「包」類型的存儲庫包含在哪裏找到所需內容的所有詳細信息。從長遠來看,這將成爲維護噩夢。如果您確信該軟件的維護人員本身不會包含composer.json文件,則軟件包應僅包含在您的composer.json中。在http://getcomposer.org/doc/04-schema.md#repositories文檔狀態:

包:如果你依賴於不具有任何作曲家支持任何你可以定義使用包庫包內聯項目。你基本上只需內聯 composer.json對象。

這種情況不適用於此,因爲您維護自己使用的存儲庫,並且應該能夠放入composer.json

現在,在您的代碼中分叉和擴展現有庫然後使用它的過程得到了Composer的支持,但不是您做到這一點的方式。首先,您應該替換供應商的名稱,因爲您接管了該角色,並且您的存儲庫和軟件應與其他軟件包區分開來。因此,將「jasonlewis/basset」重命名爲「marwelln/basset」是正確的,只有在您想引用自己的版本時才使用該名稱。

現在的問題可能是,如果分叉了一個流行的庫,並且正在使用其他需要原始庫的庫,那麼最終會添加這兩個包。這就是「替換」字段的作用:您可以在自己的composer.json中聲明您認爲您的軟件包可以替換原始軟件。一些細節在這裏:http://getcomposer.org/doc/04-schema.md#replace

我就如何「替換」一個詳細的解答在這裏工作:How does the "replace" property work with composer?

最後,我想你應該做到以下幾點(你仍然可以更改):

克隆原始文件,將composer.json更改爲承載自己的供應商名稱作爲「名稱」,並在您要更改的原始軟件版本中添加「替換」。你應該對版本進行嚴格的處理,因爲你只能替換你知道的版本。如果以後你仍然知道你更換了一個更新的版本,你可以改變「替換」信息。

然後,您必須像您一樣添加自己的存儲庫,並要求使用您自己的供應商名稱的軟件名稱。

您可能在某個時間點做了大部分工作,但添加替換信息的步驟是缺失的鏈接。

相關問題