2013-06-18 12 views
6

ローカルディレクトリで依存関係を調べるように教えてくれるComposer機能を使い始めたばかりです。そうすれば、ライブラリと、そのライブラリを並列に使用するものを開発できるようになります。それは素晴らしいです。例えばあなたは作曲の更新を行う際にcomposer.jsonの代わりに使うComposerオプション?

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

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

ので、Composerはローカルディレクトリからがつがつ食うのバージョンに引っ張ってくるので、あなたはにプッシュしなくても、そのライブラリを使用して別のアプリケーションでのライブラリのコードをテストすることができます各コード変更の間のリポジトリ

しかし、私はちょうどそのセットで私のプロジェクトのためのcomposer.jsonをチェックしました - 明らかに誰かのelsesマシンで動作するつもりはありません。

composer.jsonとは別のファイルを使用するように作曲家に指示する方法はありますか。それ以外の方法で、composer.jsonの壊れたバージョンを間違ってコミットする可能性なしに、作者にローカルディレクトリを安全に使用させることができます。あなたのリポジトリ?

答えて

2

ローカルリポジトリから他の場所からフェッチするのではなく、--prefer-sourceというオプションをcomposer install/updateコマンドに追加し、ローカルリポジトリ参照を削除することができます。

こうして作者はgitをベンダーディレクトリにクローンします。ソフトウェアを開発してベンダーソフトウェアにコミットすることもできます。これは完全に機能するgit repoでもあります。

ローカルリポジトリ参照を追加することは、実際には推奨されません。それは実際のローカルソフトウェアにそれらを使用するときに機能しますが、それを維持するのはオーバーヘッドです。間接依存のみであっても、そのソフトウェアをロードするすべての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" 
    } 
], 

は新しいcomposer.jsonを生成するcomposerLocal.phpと呼ばれる小さなPHPスクリプトを追加します。

<?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); 

?> 

と実際のcomposer.jsonファイルバックアップにlocalupdate.shと呼ばれる小さなbashスクリプト、ハッキングcomposer.json、実行作曲を生成し、復元ファイルlocalupdate.shスクリプトの実行元composer.jsonファイル

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

は、プロジェクトで使用される実際のcomposer.jsonファイルを変更する危険性がなくても、ローカルにコミットをテストすることができますので、偶然の少ないチャンスがあります無効なcomposer.jsonをリポジトリにプッシュします。

Composerはリポジトリディレクトリからファイルを読み込まないので、Gitでコミットされたファイルを読み込み、ライブラリコードの変更をコミットする必要があります。上記のプロセスは、プッシュステップをスキップするだけです。

-1

簡単に、アーティファクトを使用してください。今、あなただけのディレクトリを作成し、そのディレクトリにリポジトリのコピーを圧縮する必要が

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

:リポジトリで

はこれを追加します。そのような

名前ZIPファイル:

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

例:

querypath-QueryPath-3.0.0.zip 

は今、あなたはローカルでパッケージを変更することができ、それがZIPファイルの代わりに、オンラインレポから引っ張ってきます。

でそのようにそれを追加して、zipファイルに定義されているバージョンを指定する必要が:この方法で

"querypath/QueryPath": "3.0.0", 

を使用すると、ベンダーのファイルと作曲を編集することができるようになりますが、まだ変化に対する任意のオートローダーを更新すると、あなたの変更だけを残します。

+0

私はcomposer.jsonファイルの編集方法を知っています。問題は、「composer.jsonとは別のファイルを使用するように作曲家に指示することはありますか」ということでした。 – Danack

+0

申し訳ありませんが、質問のポイントを理解して間違っています。あなたは図書館を編集して、作曲家にそれらを残してもらいたいと思っていました。 –

関連する問題