PHPの作曲家の理由と理由


パッケージマネージャーララベルと他のフレームワークを使いましょう


開発者は、ドライアプローチの力と利点を実現しているので、フレームワークやライブラリの多くは、個人やオープンソースに細工されている.
あなたが私のような誰か(私自身2年前に正確である)ならば、あなたは言います
私が使用していた時代に戻るCodeigniter and CakePHP 2、私はちょうどダウンロードします.Zipファイル、私のプロジェクトディレクトリに展開し、開発を開始します.それで、きちんとした、右?を読む.
それから、私は2015年に新しいバージョンのCakePHP 3を目撃しました(その時私はララベルをその時試していませんでした).作曲家を使ってフレームワークをダウンロードさせてくれました.私は文句を言っていたothers , 私がどれくらいの時間と頭痛を理解するまで、それは私のために保存しそうです.

どのような作曲家?


Composer is a dependency manager and autoloading expert for PHP.


聞いたことがあるnpm ? (または糸)またはあなたがrubyistなら、バンドルはあなたに新しいものではならない.Composer PHP Worldにも同様の機能を提供します.昔はPEAR ( PHP拡張モジュールとアプリケーションリポジトリ)であった.
ここで注意すべき重要な点は、オープンソースパッケージが一般的にPackagist そして、他の場所を指定しない限り、作曲家はそこから依存関係をダウンロードします.次に、git/svnリポジトリからコードを更新して更新します.また、プライベートパッケージを使用して、または自分自身をホストして、作曲家とプライベートリポジトリを使用することができます.
私は理論が嫌いだ.実用的な話をしましょう.

作曲家の修正の痛み


以下は、作曲家が安心した苦痛の一部です.

依存管理



フレームワークを使用して新しいプロジェクトに取り組んでいるときは、その更新プログラムに依存します.バグ修正と新機能で新しいバージョンをリリースすると、セキュリティ、パフォーマンス、およびその他の理由でフレームワークを更新する必要があります.
しかし、それは手動で毎回ダウンロードして、既存のファイルを交換して、もう一度テストする痛みです.時間がかかる.そのため、もはやサポートされていないフレームワークのバージョンに依存している多くの古いコードベースが存在する理由です.レガシープロジェクトに取り組むことは、私たちのすべてが避けようとしていることです.

プロジェクトディレクトリサイズ



事前の作曲家の日、プロジェクトディレクトリのサイズは非常に大きく使用される.我々のプロジェクトが依存するすべてのライブラリを運ぶだろうし、USBスティックのいずれかのプロジェクトを通過したり、VCS(Git)の履歴を汚染する.
作曲家に入る-サイズは20 %未満に減少?プロジェクト内の依存関係を保つことなく取得することができます.composer.lock ファイル.

sad fact - Codeigniter 3 still uses the traditional download system.


デバッグ時間


プロジェクトが使用するライブラリやフレームワークは、他のライブラリに依存します(そして、チェーンは続きます......).おそらく、別のライブラリが同じライブラリのバージョンYを使用している間、フレームワークはライブラリのバージョンXを使用しています.
あなたはいくつかの衝突や非互換性のためにエラーを得ているし、問題のベースに到達するために多くの時間を置く必要があります.これ以上の-作曲家は適切なバージョンでライブラリの1つのコピーを保持するか、インストール要求を拒否します.

オートローディング


長いリストを思い出してくださいrequire 声明プロジェクトがサイズを大きくするにつれて、ファイルの数は必要です.PHP AutoLoadingは救助に来ました、しかし、それでも、それはそうでしたcomparatively hard 依存関係が成長するにつれてセットアップと維持を行う.作曲家の少ない議論された強力な特徴はautoloadです.PSR - 0をサポートします.PSR-4 , クラスのマッピングだけでなく、ファイルの自動読み込み.我々は1つだけのファイルを必要とする必要があります.簡単な名前空間を再生し、開発時間をお楽しみください.

Less known fact - Composer provides three different levels of autoloader optimisation for your different level of needs.


長いインストール手順



しばしば、1つ以上のステップはセットアップとインストールのためにライブラリをダウンロードした後に続く必要があります.パッケージのメンテナは、ドキュメント内の詳細なインストール手順を記述しなければならず、ユーザーがそれに従わず、エラーについて文句を言うときに、まだサポートクエリに答えなければなりません.Composer scripts 彼らのための恩恵です.
つは、パッケージのダウンロードのさまざまな段階の間、スクリプトとして自動化され、実行できるステップを簡単にコード化できます.たとえば、LALAVELは、作曲家スクリプトを使用して.env ファイル、アプリケーションキーを作成し、実行するautomatic discovery パッケージの

プラットフォーム要件


ライブラリ/パッケージのコードは最新のPHPバージョンのみをサポートしているかもしれませんし、特定のPHP拡張モジュールに依存します.そして、あなたは要件に満たさないシステム上でパッケージのダウンロードを防止する結果について作曲家に知らせることができます.例えば、
"require": {
    "php": "^7.1.3",
    "ext-mbstring": "*",
    "ext-openssl": "*",
    ...
},
これを加えるcomposer.json また、v 7より小さいシステムでは、作曲者はエラーをスローします.MBStringやOpenSSL拡張モジュールを使用しないでください.

ライブラリ/パッケージの保守



パッケージのメンテナは、パッケージの各バージョンの別のディレクトリを維持したり、githubを介して新しいバージョンをリリースするたびに重要なアップデートがあった.VCSタグとブランチと作曲家の優雅な統合のおかげで、1つだけでコミットとプッシュにタグを追加する必要があります.残りは注意してください.
作曲家Semantic Versioning そして、それに続いて、パッケージメンテナは、配布について心配することなく、実際の開発に集中することができます.
驚くべき.私はこれ以上不平を言っていないし、ジャンプする準備ができています.次は?

作曲家のナットとボルト


今私たちは、作曲家の理由と理由についてのアイデアがあります.どのようにパートに飛び込みましょう

インストール


作曲家のドキュメンテーションに関するインストール命令はかなり明確です、そして、私は私の最高の仕事がlink you there .

消費


Laravelを使用してプロジェクトを構築する場合は、作曲家を使用してインストールする必要があります.Though some people 伝統的な方法で行きたい、それは非常に落胆している.
Laravel自身はphpunitのような便利なオープンソースパッケージを使います.Carbon , などの依存関係も作曲家によって管理されます.あなたは潜在的な問題を避けるためにバージョン管理について学ぶ必要があります.

Fun Fact - Composer installs dependencies in the vendor directory by default but it also supports custom installers for various package types that can install dependecicies in other directories.


バージョン管理


Composerがどのようにライブラリにダウンロードするかを理解する方法composer.json ファイルはあなたに長い道のりを助けます.私はあなたにoriginal documentation 少なくとも一度記事.

Did you know? - You can require a package by its version, branch or
even by a specific commit SHA (not recommended).


個人的には、私たちの提案は、彼らが理解しやすいように意味論的なバージョン管理とワイルドカードバージョン範囲(*)を使用するパッケージのためにキャレットバージョン範囲(^)を使用することです.

作曲家の理解。ロックファイル


composer.json は、create-project コマンドを使うか、端末から直接パッケージを必要とするとき.composer.lock あなたが意識しなければならない何かです.
まず第一にshould commit あなたの作曲家.ロックファイルを使用して、チームメンバー全員が、共通プロジェクトで作業中の依存関係のコピーを使用します.どうやって起こるの?
あなたが走るときはいつでもcomposer install , 作曲家は実際に作曲家の存在をチェックします.ロックファイル.それが存在するならば、それは使用される正確なバージョン番号とSHAを含むロックファイルにつきすべての依存関係をインストールします.ロックファイルが存在しない場合、作曲家は単にcomposer.json ファイルに依存関係をインストールし、composer.lock ファイル.あなたがサーバーまたは他のコンピュータでインストールコマンドを実行する次の時間、ロックファイルはあなたに正確な同じコピーを与えるために使用されます.
一方、composer update コマンドはcomposer.json 直接ファイルを作成し、依存性の新しいバージョンをインストールします.

作曲家の減速



私は、作曲家による遅いインストールと更新を経験しました.バックグラウンドで何が起こっているかについて不明な点は、私が私が次のステップを取ることができる前に私がそれを完了するのを待つので、私はちょうどスクリーンをじっと見つめ続けます.
あなたが同じ問題に直面しているならば、私はあなたに作曲家コマンドを加えてください--profile and -vv あるいは-vvv 背景処理についての詳細情報を表示するには例えば、
composer install -vv --profile
出力から特定の問題を見つけることができないならば、あなたは試みることもできますthis package 並列ダウンロードを有効にする.

パッケージ開発


あなたの最初のパッケージ/ライブラリを構築し始めている場合は、開発を容易かつ快適にするために非常に有用なヒントがあります.
ほとんどの場合、パッケージ/ライブラリは、開発中に実際のプロジェクトに対してテストされる必要があります.そのため、管理者はパッケージを実際のプロジェクトの中に置いておく必要があります.
作曲家Path repositories そのトラップから自分を救うことができます.それはシンボリックリンクまたはプロジェクトのレポをミラーし、別のコードベースを維持し、管理し、簡単に切り替えることができます.
ララベルスーパーアルチザンadded a bash alias 単一のコマンドでこの機能を使用するには.

Quick tip - If your package contains a command line script which you would like to pass along to the users, consider using vendor binaries. PHPUnit uses it to quickly let you fire vendor/bin/phpunit.


ブランチ


一旦あなたのパッケージ/ライブラリが複数のプロジェクトによってすでに使われているならば、あなたは開発者の生命を少しより簡単にするために分岐aliasisを加えることも考慮しなければなりません.This article それの後ろで理由を説明して、それをする方法も指定します.

Advanced level developers - Composer allows you to alter or expand it's functionality by using composer-plugins. You can perform actions when your package is loaded and when certain events are fired.


最終ノート


これは少し長いものだった.我々は依存関係管理についての迅速な歴史をカバーし、作曲家が何であるかを学び、それが修正されたペインについて議論された後、新しい開発者とパッケージのメンテナのために作曲家のいくつかの有用なポイントとヒントを通過しました.
それは私が言わなければならなかったものです.ここでは、各ラインを読んでトップからすべての方法に達している場合は、ありがとう.私たちの思考スタイルは一致すると思います.コメント欄でこんにちは.
何か質問があれば、あなたのコメントを投稿してください.
そして、これがあなたのオンラインネットワークの他の開発者を助けることができると思うならば、私は彼らとこれをあなたに会わせて満足です.ありがとう.