0

私は、自分の新しい光沢のあるパッケージであるパッケージ P への依存関係を定義する composer.json ファイルを持つアプリケーション A を持っています。私のパッケージ P には、ライブラリ L とフレームワーク F への依存関係を定義する composer.json ファイルがあります。私のパッケージ P にはまだリモート リポジトリがなく、packagist.org にもまだ公開されていません。ブラウザでアプリケーション A を実行し、アプリケーション A が依存するパッケージ P を継続的に変更します。

私にとってワークフローを本当に複雑にする問題がいくつかあります。

1) A から P への依存関係の定義は、ここで説明されているように、ローカル リポジトリを使用してのみ可能です: https://getcomposer.org/doc/05-repositories.md Aで実際にテストできます。

2) 1) を参照すると、これは、composer updateP に変更をコミットするたびに実行する必要があることを意味します (そもそもコミットしたくありません)。

3)一方、 P でローカル リポジトリを使用しない場合、A から P への実際の依存関係を定義できません。つまり、実行してcomposer installも、P の composer.json ファイルで定義された依存関係 L および F がインストールされません。

したがって、私の意見では、2 つのワークフローが考えられます。

1) P の変更を A にコミットしcomposer update、変更がどのように機能するかを確認します。

2)依存関係としてローカル リポジトリを使用せず、P の composer.json ファイルで定義されている依存関係を A の composer.json ファイルにコピーcomposer installして、依存関係 L および F を取得するために使用できるようにします。

基本的に、私はcomposer install/updateすべてのサードパーティの依存関係をインストールするために実行できる新しい composer パッケージを開発するためのワークフローを探していますが、変更をテストするために自分のローカル パッケージに変更をコミットする必要はありません。

上記の問題に対する解決策はありますか?

どうもありがとう!

4

1 に答える 1

3

同時に複数のパッケージで作業する必要がある状況にあるときに使用する解決策は、各パッケージをローカルに登録し、composer install最初composer updateにそのパッケージをベンダー ディレクトリから削除して、保存する場所にシンボリック リンクすることです。ローカルの「WIP」バージョン。

例えば:

  • composer.json ではmy_vendor/packageA、 内でローカルに登録されている が必要です~/.composer/config.json
  • composer update my_vendor/packageAcomposer に新しいパッケージを認識させるために実行します。
  • composer がパッケージのインストールを完了した後:
    • cd vendor/my_vendor && rm -rf packageA && ln -s ../../../packageA .

次のようなものが残ります。

  • working_dir/
    • packageA/ (これは私が packageA で作業する場所です)
    • プロジェクトA/
      • アプリ
      • ソース
      • ベンダー/
        • ベンダー1/
        • ベンダー2/
        • my_vendor/
          • パッケージA -> ../../../パッケージA

これにより、次のことが可能になります。

  • packageAベンダーディレクトリ内からでも変更するには
  • packageA内でこれらの変更を使用する前に、コミットする必要はありませんprojectA

packageA が十分に安定すると、シンボリック リンクが削除され、VCS/packagist のバージョンを使用してすべてが正常に戻ります。

時間をかけてさまざまなソリューションを試しましたが、上記の方法が最適であることがわかりました。

可能な場合に使用する代替ソリューションは、各プレフィックスに対して PSR-0 ディレクトリを手動で登録することです。

<?php

$autoloader = require_once __DIR__.'/vendor/autoload.php';
$autoloader->add('MyVendor\\Dummy\\', '/path/to/dummy-component/src');

// now you can use MyVendor\Dummy as normal.

注: PSR-4 の場合はaddPsr4()方法があります。

于 2014-10-05T10:59:08.510 に答える