web-dev-qa-db-ja.com

PHPパッケージ管理あり/なしComposer

多くの(大きな)PHPアプリケーションが依存関係の管理にComposerを使用していることに気付きました。現在、Composerに切り替える必要があるかどうかを調べています(現時点では、依存関係を単純にvendor /というフォルダーに保持しています-自動的に更新することはできません)。

私はこの方法を好みます:

一方、私のアプローチにはいくつかの問題があります:

私のアプローチはこれまでのところ機能しましたが、この開発/デプロイメントプロセス全体で何かが足りない可能性があると思います。依存関係やデプロイを管理するのではなく、開発に集中することを心がけているので、デプロイプロセスはできるだけスムーズで透過的であることが望ましいです。また、このアプローチでは、各サーバーでの更新に約30秒かかります。composerを使用すると、さらに時間がかかります(Composerでの更新は、すべてのサードパーティのリポジトリに接続する必要があるため) 。

したがって、要約として:

改善のためのアイデアはありますか?

編集:このトピックに関連する2つの記事で非常に興味深いものを見つけました:---(http://www.redotheweb.com/2013/09/12/should-you-commit-dependencies.html および- http://addyosmani.com/blog/checking-in-front-end-dependencies/ 。彼らが主に言っていることは「それは依存する」ということだと私は信じています。したがって、少なくとも私にとっては、依存関係をチェックインした方がよいと思います。

4
Razvan

Composerの問題のほとんどは軽減できます:

  • 依存関係のコピーを自分でホストします。スケジュールされたgit pullを使用して、自動的に更新することもできます。大規模なプロジェクトや企業環境の場合、これは良いステップです。
  • すぐにアップロードできる本番環境対応バンドルを作成するビルドシステムまたは継続的インテグレーションサーバーを使用します。これは、単一のシェルスクリプトと同じくらい簡単です。 (手動のFTPアップロードではなく)適切なデプロイシステムを使用している場合、これは簡単に接続できます。

これら2つのことにより、ほとんどの懸念が軽減されます。すでに導入システムを使用しているかどうかは示さなかった。そうでない場合、これは実際にはあなたの最大の問題かもしれません。自動化されたデプロイメントでは、ビルドステップは必要に応じて複雑になる可能性があります。すべてをスクリプト化できる場合は、それほど重要ではありません。

について:

私はComposerを認識しない多くのコンポーネントを使用しています。 Composerを使用する場合、これらを管理するにはSatisなどのツールを使用する必要があります。

あなたは自分のcomposer.json内に不足しているcomposer.jsonファイルのインライン定義を単に書くことができることを知っていますか?ほとんどの場合、これにより問題なくComposerサポートを改良できます。

多くの変更と更新があり、Composerが違いを確認して新しいバージョンに更新できるように、各コミットにタグを設定するよりも、これらのコミットを本番環境にプッシュする方が簡単だと思います。

個別のタグを作成する必要はありません。 git commitの数値も使用できます。


Composerは、依存関係の解決だけに役立ちます。ますます多くのパッケージがますます複雑になり、手動で依存関係を追跡することはかなり面倒な作業になる可能性があります。ときどきバージョンの競合が発生することは言うまでもありません。手動で検出するのは難しく、通常、依存関係マネージャーを使用しない場合は、実行時に不明瞭なバグとして現れるだけです。

適切な開発、依存関係管理、ビルド、テスト、デプロイワークフローの設定は、事前に時間がかかる可能性があることの1つですが、十分に複雑なプロジェクトで長期的に無数の時間を節約できます。

1
deceze

composerの主な問題は速度のようです。非常に多くのコードがプロジェクト間で共有されているため、共有ベンダーのサブフォルダーにシンボリックリンクを設定できるため、プロジェクトの1つだけを更新する必要があります。その後、rsyncを使用してすべてのサーバーにデプロイできます。

各プロジェクトにビルドバージョンを含むファイルを用意して、デプロイメントスクリプトでそれを使用してcss/jsの縮小ファイル名を更新し、キャッシュを無効化できるようにします。すべてのプロジェクトのビルドバージョンのグローバルキャッシュを含む一時ファイルを設定して、デプロイ時に比較し、更新されたものだけをプッシュすることもできます。

0