この説明は完全であると主張するものではなく、このツールについての簡単なアイデアを提供するだけです。
作曲家の説明と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フレームワークの最小インストールの例を見てみましょう。
このコマンドを使用して、ComposerをPHPアーカイブ形式(composer.phar)でダウンロードします。 次に、最小限のcomposer.jsonを作成します。
次に、web / index.phpを作成します。
Silexフレームワークの準備はすべて整いました。Webサーバーのインストールと起動は省略します。インターネットには既製の説明がたくさんあります。
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" } }
- name :リポジトリの名前、
- ホームページ :「/ path / to / your / webroot / satis / web」ディレクトリが利用できるリンク。
- archive.directory :パッケージキャッシュが保存されるパス。
- archive.skip-dev :devパケットをスキップします。 乙女は頻繁に変わりますが、packagist.org、github、bitbucketなどへの依存症を完全になくしたい場合は、 次にfalseに設定します。
- repositories : リポジトリのリスト、いくつかあります。 githubなどでパッケージへの直接リンクを指定できます。
- {"Type": "composer"、 "url": " packagist.org "} :Composer-Packagistの元のパッケージリポジトリを指定します。
- require-dependencies :依存関係の依存関係をダウンロードするかどうか。 繰り返しますが、完全に独立させるには、trueに設定します。
- require :キャッシュを使用したいパッケージのリスト。
- {"Silex / silex": "> 1"} :この例では、Silexフレームワークがインストールされている例から「require」を取得し、最初のバージョンより上のバージョンを示します。
そして、アセンブリを実行します:
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」のダンプ。
「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" } }
- リポジトリ :パッケージリポジトリのリスト。
- {"Type": "composer"、 "url": " packagist.example.com "} :タイプcomposerで新しく作成されたSatisリポジトリへのリンク。
- {"Packagist":false} :デフォルトでは、指定されたリポジトリのリストにパッケージが見つからない場合、ComposerはPackagistでパッケージを探します。 快適で快適です。 しかし、この動作を破ると、すべてのパッケージがローカルストレージにあることを確認できません。 観察結果を追加します。依存関係が多い場合、 Composerは多くのメモリを消費し 、レポートサイズは3GBになります...これは悲しいことです。 そのため、店舗を1つだけ残すまで、同様の状況を観察しました。 つまり、 packagist.orgまたはSatisのいずれかです。
- require :依存関係のリスト。
- {"Silex / silex": "〜1.1"} :現時点では、Silexのみが必要です。
ここで、構造が機能していることを確認するには、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パッケージについては、コメントで議論することを提案します。