0

ほとんどの場合、私は Joomla 拡張機能を開発しています。ヘルパー クラスやインストール クラスなどを再利用する必要があることはよくあります。これまでは、貼り付けたコードをコピーするだけでした。わかっています、わかっています... しかし、これは常に最速のソリューションであり、長期的には最も遅いことが判明します。私は今、自分のプロジェクトで依存関係を管理する方法を考えていました。composer を試してみましたが、気に入っていますが、私には合わないようです。詳しく説明しましょう。次のフォルダ構造があるとしましょう

projects
- library A
- library B
- project A
- project B
- project C

プロジェクト A と B はどちらもライブラリ A と B を使用し、プロジェクト C はライブラリ A のみを使用します。composer を使用する場合、フォルダーの構造は次のようになります。

projects 
- library A
- library B
- project A
-- vendor
--- library A
--- library B
- project B
-- vendor
--- library A
--- library B
- project C
-- vendor
--- library A

わかりません-自分で開発していないサードパーティのライブラリを使用している場合、これで問題ないかもしれませんが、ハードドライブにライブラリAとライブラリBのコードが既にある場合-なぜ*をコピーしますかそれらをベンダーフォルダーに移動しますか?それだけでなく、ライブラリを更新するたびに、各プロジェクトで composer update を実行して、最新のライブラリ バージョンを取得する必要があります。これは私にはちょっと逆効果に思えますか?

だから私が思いついたのは - >シンボリックリンクです。ライブラリ A と B にシンボリック リンクを配置すると、変更を加えるたびに -> 変更がすべてのプロジェクトに自動適用されます。

拡張機能を zip するたびに、phing スクリプトがライブラリを取得し、それらを zip に含めます。これは私の開発ワークフローには適しているようですが、別の問題があります。私のプロジェクトのいくつかは github で利用でき、他の開発者はそれらを fork したり、好きなことをしたりします。ここで、ビルド スクリプトが機能するためには、私と同じディレクトリ構造を作成する必要があることを彼らに説明する必要があります。プロジェクト A をダウンロードしますが、ライブラリ A と B をダウンロードする必要があります。

これが作曲家の素晴らしいところです。しかし、簡単にしたい場合は、シンボリックリンクを使用する必要があります...そのような状況をどのように管理していますか? コードをあちこちにコピーする必要がなく、同時に他の開発者が数秒で簡単に作業を開始できるようにするために、ワークフローはどのようなもので、プロジェクトとライブラリをどのように構成しますか? どんなヒントでも大歓迎です!

4

3 に答える 3

0

すでにシンボリック リンクに心当たりがあり、これらすべてのプロジェクトが同じサーバー上にあると仮定すると、次のことを提案します。

共有ベンダー ディレクトリ

  • ベンダーA
    • 現在 -> 0.3 ((すべての) プロジェクトが共有する「安定した」バージョンへのシンボリックリンク)
    • 0.1
    • 0.2
    • 0.3
  • ベンダーB
    • 現在 -> 0.0.2
    • 0.0.1
    • 0.0.2
    • 0.0.3-ベータ

したがって、依存関係の 1 つの新しい更新を投稿するときに、プロジェクトのバージョンを切り替えることで、これらを適切にテストできます。すべてのプロジェクトにそれを適用することに満足している場合は、単なるシンボリック リンクの切り替えです。

プロジェクト A のベンダー ディレクトリ

  • vendorA -> /shared/vendorA/current
  • vendorB -> /shared/vendorB/current

要件が異なるプロジェクト B のベンダー ディレクトリ

  • ベンダーA -> /共有/ベンダーA/0.1
  • vendorB -> /shared/vendorB/current

しかし、私は作曲家が本当に好きです...

composer で外部依存関係を使用できるようにするかどうかによっては、この方向で何かを試してみることをお勧めします。

"autoload": { "psr-0": {"vendorA": "/shared/vendorA/current"} }
于 2013-10-31T09:28:58.037 に答える