Composerのパッケージキャッシング

プロジェクト開発への最新のアプローチを使用して、パッケージマネージャーの喜びを使用し始めます。PHPでの開発の場合はComposerです。 この記事では、Composerを簡単に見てから、ローカルパッケージキャッシュの設定について説明します。



この説明は完全であると主張するものではなく、このツールについての簡単なアイデアを提供するだけです。

作曲家の説明とSilexの例。
公式ドキュメントから説明を取得します。

Composerは、PHPの依存関係管理ツールです。 プロジェクトに必要な依存ライブラリを宣言し、プロジェクトにインストールできます。 Composerは、Packagistと連携して動作します。

Packagist -Composerパッケージリポジトリ。 適切なパッケージを見つけて、Composerでソースパッケージの入手先を見つけることができます。



他の問題では、ComposerはPackagistストレージに限定されず、svn、git、pearから依存パッケージを構成できます。 パッケージには、適切に構成された構成ファイル(composer.json)が含まれている必要があります。 これは必須ではありませんが、構成ファイルが必要なパッケージにない場合は、プロジェクトの依存関係構成ファイルに既に登録する必要があります。



プロジェクトの依存関係は、Json構成ファイル(composer.json)を通じて構成されます。 一番下の行は、Packagistで適切なパッケージを見つけ、composer.jsonに適切なエントリを追加し、Composerを実行します。Composerはパッケージ自体をダウンロードして構成します(アクションが規定されるとパッケージ開発者によって構成されます)。



(debian / ubuntu)でのSilexフレームワークの最小インストールの例を見てみましょう。

mkdir /path/to/your/webroot/silex; cd /path/to/your/webroot/silex sudo apt-get install git php5 curl; curl -sS https://getcomposer.org/installer | php
      
      







このコマンドを使用して、ComposerをPHPアーカイブ形式(composer.phar)でダウンロードします。 次に、最小限のcomposer.jsonを作成します。

 echo '{"require": {"silex/silex": "~1.1"} }' > composer.json php composer.phar install
      
      







次に、web / index.phpを作成します。

 <?php // web/index.php require_once __DIR__.'/../vendor/autoload.php'; $app = new Silex\Application(); // definitions $app->run();
      
      







Silexフレームワークの準備はすべて整いました。Webサーバーのインストールと起動は省略します。インターネットには既製の説明がたくさんあります。





パッケージマネージャーの問題は、同じパッケージをインストールしなければならないことが多すぎることです。 プロジェクトの各新規インストールは、パッケージの依存関係、依存関係の依存関係などのソースを見つけるためのpackagist.orgの呼び出しです。 さらに必要なパッケージをダウンロードします。 公平には、Composerには組み込みのキャッシュがありますが、〜/ .composer / cacheの下に格納されているため、開発者、テスター、QA、およびプロダクション用の個別の環境は言うまでもなく、各ユーザーごとに個別であることに注意してください。 そしてどこでも同じパッケージがダウンロードされます。



ほとんどのパッケージはgithubにあり、そこからローカルキャッシュに戻らないように十分な速度でダウンロードされます。 しかし、GitHubが再び利用できなくなったり、DDosによって速度が低下したり、依存関係のサイズでさえ数百メガバイトに達すると、これが問題になります。 Githubは利用できません-仕事に値するものです。 現在、Satisユーティリティを提供しています。



SatisはComposerパッケージの静的リポジトリであり、Packagistの超軽量の静的バージョンであり、会社のプライベートパッケージまたは独自のパッケージをホストするために使用できます。



公式の説明からわかるように、Satisの主な目標はプライベートパッケージを接続する能力です。 ただし、Satisは、同じPackagistからパッケージをダウンロードし、ダウンロードしたパッケージをzipまたはtarで保存し、配布することもできます。 これが必要なものです。 それでは、インストールに進みましょう。

 cd /path/to/your/webroot sudo apt-get install php5 git curl; curl -sS https://getcomposer.org/installer | php php composer.phar create-project composer/satis --stability=dev; cd satis
      
      







次に、satis.json構成を作成します。

 { "name":"Project name", "homepage":"http://packagist.example.com", "archive":{ "directory":"dist", "skip-dev":false }, "repositories":[ { "type":"composer", "url":"https://packagist.org" } ], "require-dependencies":true, "require":{ "silex/silex":">1" } }
      
      









そして、アセンブリを実行します:

 php bin/satis build satis.json web/
      
      







私はこの出力を得ました:
パッケージのスキャン

「web // dist」でローカルダウンロードを作成する

'doctrine / annotations-1.0.0.0'をダンプしています。

「doctrine / annotations-1.1.0.0」をダンプします。

「doctrine / annotations-1.1.1.0」をダンプします。

「doctrine / annotations-1.1.2.0」をダンプします。

'doctrine / annotations-9999999-dev'をダンプしています。

'doctrine / cache-1.0.0.0'をダンプしています。

'doctrine / cache-1.1.0.0'をダンプしています。

'doctrine / cache-1.2.0.0'をダンプしています。

'doctrine / cache-9999999-dev'をダンプしています。

'doctrine / collections-1.0.0.0'をダンプしています。

「doctrine / collections-1.1.0.0」をダンプします。

'doctrine / collections-9999999-dev'をダンプしています。

「doctrine / common-2.2.0.0」をダンプします。

「doctrine / common-2.2.0.0-RC1」をダンプします。

「doctrine / common-2.2.0.0-RC3」をダンプします。

「doctrine / common-2.2.0.0-RC4」をダンプします。

「doctrine / common-2.2.0.0-RC5」をダンプします。

「doctrine / common-2.2.0.0-beta1」をダンプします。

「doctrine / common-2.2.0.0-beta2」をダンプします。

「doctrine / common-2.2.1.0」をダンプします。

「doctrine / common-2.2.2.0」をダンプします。

「doctrine / common-2.2.3.0」をダンプします。

'doctrine / common-2.2.9999999.9999999-dev'をダンプしています。

「doctrine / common-2.3.0.0」をダンプします。

'doctrine / common-2.3.0.0-RC1'をダンプしています。

「doctrine / common-2.3.0.0-RC2」をダンプします。

「doctrine / common-2.3.0.0-RC3」をダンプします。

'doctrine / common-2.3.0.0-beta1'をダンプします。

'doctrine / common-2.3.9999999.9999999-dev'をダンプしています。

「doctrine / common-2.4.0.0」をダンプします。

'doctrine / common-2.4.0.0-RC1'をダンプします。

「doctrine / common-2.4.0.0-RC2」をダンプします。

「doctrine / common-2.4.0.0-RC3」をダンプします。

「doctrine / common-2.4.0.0-RC4」をダンプします。

「doctrine / common-2.4.1.0」をダンプします。

'doctrine / common-2.4.9999999.9999999-dev'をダンプしています。

'doctrine / common-9999999-dev'をダンプしています。

「doctrine / inflector-1.0.0.0」をダンプします。

'doctrine / inflector-9999999-dev'をダンプしています。

「doctrine / lexer-1.0.0.0」をダンプします。

'doctrine / lexer-9999999-dev'をダンプしています。

「pimple / pimple-1.0.0.0」をダンプしています。

「pimple / pimple-1.0.1.0」をダンプしています。

「pimple / pimple-1.0.2.0」をダンプしています。

「pimple / pimple-9999999-dev」をダンプしています。

「psr / log-1.0.0.0」をダンプしています。

「silex / silex-1.0.1.0」のダンプ。

「silex / silex-1.0.9999999.9999999-dev」をダンプしています。

「silex / silex-1.1.0.0」をダンプしています。

「silex / silex-1.1.1.0」のダンプ。

「silex / silex-9999999-dev」をダンプしています。

「symfony / debug-2.3.0.0」をダンプしています。

「symfony / debug-2.3.1.0」をダンプしています。

「symfony / debug-2.3.2.0」をダンプしています。

「symfony / debug-2.3.3.0」のダンプ。

「symfony / debug-2.3.4.0」のダンプ。

「symfony / debug-2.3.5.0」のダンプ。

'symfony / debug-2.3.6.0'をダンプしています。

「symfony / debug-2.3.9999999.9999999-dev」をダンプしています。

'symfony / debug-2.4.0.0-beta1'をダンプしています。

「symfony / debug-9999999-dev」をダンプしています。

「symfony / event-dispatcher-2.1.0.0」をダンプしています。

「symfony / event-dispatcher-2.1.1.0」のダンプ。

「symfony / event-dispatcher-2.1.10.0」をダンプしています。

「symfony / event-dispatcher-2.1.11.0」をダンプしています。

'symfony / event-dispatcher-2.1.12.0'をダンプしています。

「symfony / event-dispatcher-2.1.13.0」をダンプしています。

「symfony / event-dispatcher-2.1.2.0」のダンプ。

「symfony / event-dispatcher-2.1.3.0」のダンプ。

「symfony / event-dispatcher-2.1.4.0」をダンプしています。

「symfony / event-dispatcher-2.1.5.0」のダンプ。

「symfony / event-dispatcher-2.1.6.0」のダンプ。

「symfony / event-dispatcher-2.1.7.0」のダンプ。

「symfony / event-dispatcher-2.1.8.0」のダンプ。

「symfony / event-dispatcher-2.1.9.0」のダンプ。

「symfony / event-dispatcher-2.1.9999999.9999999-dev」をダンプしています。

「symfony / event-dispatcher-2.2.0.0」のダンプ。

「symfony / event-dispatcher-2.2.1.0」のダンプ。

「symfony / event-dispatcher-2.2.2.0」のダンプ。

「symfony / event-dispatcher-2.2.3.0」のダンプ。

「symfony / event-dispatcher-2.2.4.0」のダンプ。

「symfony / event-dispatcher-2.2.5.0」のダンプ。

「symfony / event-dispatcher-2.2.6.0」のダンプ。

「symfony / event-dispatcher-2.2.7.0」のダンプ。

「symfony / event-dispatcher-2.2.8.0」のダンプ。

「symfony / event-dispatcher-2.2.9.0」のダンプ。

「symfony / event-dispatcher-2.2.9999999.9999999-dev」をダンプしています。

「symfony / event-dispatcher-2.3.0.0」のダンプ。

「symfony / event-dispatcher-2.3.1.0」のダンプ。

「symfony / event-dispatcher-2.3.2.0」のダンプ。

「symfony / event-dispatcher-2.3.3.0」のダンプ。

「symfony / event-dispatcher-2.3.4.0」のダンプ。

「symfony / event-dispatcher-2.3.5.0」のダンプ。

「symfony / event-dispatcher-2.3.6.0」をダンプしています。

「symfony / event-dispatcher-2.3.9999999.9999999-dev」をダンプしています。

「symfony / event-dispatcher-2.4.0.0-beta1」をダンプしています。

「symfony / event-dispatcher-9999999-dev」をダンプしています。

「symfony / http-foundation-2.1.0.0」のダンプ。

「symfony / http-foundation-2.1.1.0」のダンプ。

「symfony / http-foundation-2.1.10.0」のダンプ。

「symfony / http-foundation-2.1.11.0」のダンプ。

「symfony / http-foundation-2.1.12.0」のダンプ。

「symfony / http-foundation-2.1.13.0」のダンプ。

「symfony / http-foundation-2.1.2.0」のダンプ。

「symfony / http-foundation-2.1.3.0」のダンプ。

「symfony / http-foundation-2.1.4.0」のダンプ。

「symfony / http-foundation-2.1.5.0」のダンプ。

「symfony / http-foundation-2.1.6.0」のダンプ。

「symfony / http-foundation-2.1.7.0」のダンプ。

「symfony / http-foundation-2.1.8.0」のダンプ。

「symfony / http-foundation-2.1.9.0」のダンプ。





ここで、Satisキャッシュを使用するプロジェクトのパッケージ構成を微調整する必要があります。再度、Silexの例を使用します。

 cd /path/to/your/webroot/silex echo '{"repositories": [{ "type": "composer", "url": "http://packagist.example.com" },{ "packagist": false } ], "require": {"silex/silex": "~1.1"}}' > composer.json
      
      







composer.jsonのフォーマットされたバージョン
 { "repositories":[ { "type":"composer", "url":"http://packagist.example.com" }, { "packagist":false } ], "require":{ "silex/silex":"~1.1" } }
      
      











ここで、構造が機能していることを確認するには、Composerキャッシュをクリアする必要があります。そうしないと、Composerはキャッシュからパッケージを取得します。

 cd /path/to/your/webroot/silex; rm composer.lock; rm -fr vendor; rm -fr ~/.composer/cache php composer.phar install
      
      







それだけです 設定が正しい場合、Composerはローカルキャッシュ(http://packagist.example.com)からパッケージを取得します。



提案されたソリューションのマイナス点は、キャッシュされたパケットを手動でSatis構成ファイル(satis.json)に登録する必要があることです。つまり、Satisは自動キャッシュのプロキシとして機能しません。 また、Satisビルドによってプルされるクラウンスクリプトを構成して、devパッケージを更新し、パッケージの新しいバージョンをダウンロードする必要があります。

0 */12 * * * cd /path/to/your/webroot/satis/; php bin/satis build satis.json ./web/







PSの不正確さとエラーはPMでお願いします。

PSSその他のキャッシュソリューションComposerパッケージについては、コメントで議論することを提案します。



All Articles