2013-06-18 142 views
6

我剛剛開始使用Composer功能,告訴它查看本地目錄的依賴關係,以便您可以開發一個庫和一些並行使用該庫的內容,而不必一直推送到git進行更新,這真棒。例如Composer選項使用替代composer.json?

"repositories": [ 
    { 
     "type": "vcs", 
     "url": "/documents/projects/github/guzzle" 
    } 
], 

"require":{ 
    "guzzle/guzzle": "3.7.*@dev" 
} 

所以,當你做一個作曲家更新,作曲家將拉動從本地目錄中的版本狂飲的,所以你可以測試在另一個應用程序庫,使用該庫中的代碼,而不必推到每個代碼更改之間的存儲庫

然而,我剛剛用我的項目檢查了composer.json - 這顯然不適用於任何其他人。

有沒有辦法告訴作曲家使用不同於composer.json的文件,或者其他方式能夠告訴作曲家安全地使用本地目錄,而沒有意外地將破碎版本的composer.json提交給你的倉庫?

回答

2

取而代之從其他地方的本地存儲庫獲取,您可以將選項--prefer-source添加到composer install/update命令中,並刪除本地存儲庫引用。

這種方式作曲家將調用git克隆到供應商目錄的軟件,你可以開發你的軟件和承諾的供應商軟件,因爲這也是一個完全有效的git回購。

不推薦添加本地存儲庫引用。它在將它們用於真正的本地軟件時起作用,但維護它會產生開銷:您必須在每個composer.json文件中提及該存儲庫,該文件將永久加載該軟件,即使它只是間接依賴項(即您添加軟件需要將此軟件作爲本地回購的依賴項)。

對存儲庫的URL進行硬編碼也會阻止您隨意更改它。即使您可以相應地移動回購站點並更改URL,但所有舊版本軟件的composer.json和composer.lock文件中都將保留舊URL,並會嘗試從此處加載。

0

看起來好像沒有辦法在Composer中很好地做到這一點,然而它有可能破解它。

在您的composer.json文件中發表評論,您想在某些數據中進行破解。

{ 
"name": "base-reality/intahwebz", 

"//": "LOCALHACK", 

"require":{ 
    "base-reality/php-to-javascript": ">=0.1.17", 
    "guzzle/danackguzzle": "3.3.*@dev", 
    ... 
    ... 
    } 
    ... 
} 

然後有一個包含本地目錄引用一個單獨的文件composer.local(不承諾GIT):

"LOCALHACK", 

"repositories": [ 
    { 
     "type": "vcs", 
     "url": "/documents/projects/github/intahwebz-core" 
    } 
], 

添加名爲composerLocal.php一個小PHP腳本來生成新的composer.json文件

<?php 

$srcFile = file_get_contents("composer.json"); 
$hackFile = file_get_contents("composer.local"); 
$finalString = str_replace('"LOCALHACK",', $hackFile, $srcFile); 
file_put_contents("composer.json", $finalString); 

?> 

並號召localupdate.sh備份真正composer.json文件一點bash腳本,產生砍死composer.json,運行作曲,然後恢復原來composer.json文件

cp -f composer.json composer.json.bak 
php composerLocal.php 
composer update 
cp -f composer.json.bak composer.json 

運行localupdate.sh腳本允許你在本地測試提交,而無需修改該項目使用的實際composer.json文件的危險,所以有較少的意外機會將無效的composer.json推入存儲庫。

要注意的是,Composer不會讀取respository目錄中的文件,它會讀取Git中的提交文件,因此您需要提交對庫代碼所做的更改。上述過程只是跳過推動步驟。

-1

簡單,只需使用神器。

在庫補充一點:

{ 
    "type": "artifact", 
    "url": "path/to/artifact/files/" 
}, 

現在你只需要創建目錄和zip版本庫的拷貝到該目錄。

名稱的壓縮文件,像這樣:

[vendorname]-[packagename]-[version].zip 

例如:

querypath-QueryPath-3.0.0.zip 

現在你可以在本地修改包,它會從zip文件,而不是網上回購拉。

在需要添加它像這樣,指定版本,如拉鍊定義:

"querypath/QueryPath": "3.0.0", 

有了這個方法,你必須編輯供應商文件的能力和作曲家仍然會更新任何自動加載機相對變化和它會讓你的改變孤單。

+0

我知道如何編輯composer.json文件。問題是「是否有告訴作曲家使用與composer.json不同的文件」,以避免編輯composer.json。 – Danack

+0

對不起,錯過了解這個問題的重點。以爲你想編輯圖書館,讓作曲家讓他們獨處。 –