tl; dr :フレームワークにとらわれないパッケージを作成している場合は、lights / supportを使用しないでください。
マットアランの「 イルミネーションサポートを使用しない 」記事の翻訳。
多くの不可知なComposerパッケージパッケージ(PHP)は、Laravelフレームワークで使用されるヘルパーと汎用コードを含むlights / supportに依存しています。 そして、すべてこのパッケージにはarray_get
ような多くの素晴らしい関数と素晴らしいコレクションが含まれているからです。
ヘルパーは素晴らしいことですが、開発者がプロジェクトにこのパッケージを含めることの結果をすべて理解しているとは思いません。 誰もが自転車の発明に対する批判を恐れているので、彼らは自分でそのようなコードを書かないように6,000行以上のコードを引っ張ります
isset($arr[$k]) ? $arr[$k] : null
中毒地獄
ライト/サポート(5.2)を使用して、ライト/コントラクト、ドクトリン/インフレクター、random_bytesのポリフィル、mb_stringをプロジェクトに取り込みます。 幸いなことに、依存関係ツリーはここで終わります。
mb_stringは標準のphpモジュールではないため、ユーザーのマシンにインストールできません。 文字列を使用していない場合は、パッケージを使用するためだけにユーザーにPHPの再コンパイルを強制しないでください。 ポリフィルを使用する良い代替手段として、stringyを使用できます。
バージョンの競合
6,000以上のパッケージがイルミネーション/サポートに依存しています 。 誰かがあなたのパッケージと、イルミネーション/サポートを含む別のパッケージをインストールする場合、同じバージョンに依存する必要があります。そうしないと、競合が発生します。 一見すると、多くのプロジェクトがまだバージョン4.1.xを使用していることがわかります。
パッケージをLaravelまたはLumenと一緒に使用すると、状況が悪化します。 ユーザーは、あなた(およびライト/サポートを使用するすべてのパッケージ)の前にアップグレードすることはできません。 これで、ユーザーによるフレームワークの更新を停止しています。 唯一の代替手段は、 >5.2
ような無制限の範囲を使用することですが、これはかなり悪い考えです。
グローバルスコープ
照明/サポートは、 52の機能をグローバルスコープに引き込みます。 使用するフレームワークが名前空間を使用しない場合、それは良いことです。 依存関係によってグローバルエリアが汚染されることはありません。
しかし、ヘルパーは素晴らしいので、それらを使用してみませんか? 一部のトランスフォーマーは期待どおりに動作せず 、 dd
端末では dd
ません 。 しかし、誰もがこれらの52の機能が望みどおりに動作することを望んでいるため、グローバルな領域に配置します。
ファサード
これはもちろん小さな問題ですが、コードを1週間に40時間以上書くと非常に面倒です。 点灯/サポートには、コレクション、リクエスト、レスポンス、アプリなどの一般的に使用される多くのクラスがあります。 名前空間の入力を開始するたびに、IDEは必要な実際のクラスではなく、間違ったコレクションまたは役に立たないファサードをインポートしようとします。 点灯/サポートには、Laravel以外では機能しないクラスのカタログ全体が含まれます! 不可知論のフレームワークの一部としてファサードを使用しないことを保証しますので、それらを私のプロジェクトに取り込むのをやめてください。
重大なエラー
パッケージは、SemVerに違反しない3つの異なるパッケージに依存するようになりました。 数行のコードを書く代わりに、 左パッドと同じ問題を起こす危険がありますか?
より少ない依存関係をターゲットにする
可能な限り少ない依存関係を使用するようにしてください。 phpleagueのプロジェクトを見ると、それらはすべて少数の依存関係を持っているか、まったく持っていないことがわかります。 2つまたは3つの関数の小さなヘルパークラスを作成することをお勧めします。 自分で書きたくない場合は、ライセンスに従って必要な機能をコピーしてください。
可能なすべてのバージョンをテストする場合、独自のコードを記述していくつかの補助機能のテストを行うよりもCIサーバーを構成するのに時間がかかります。
代替案
大量の機能が必要な場合は、すべてを自分で記述するのではなく、パッケージを使用する必要があります。 照明/サポートは膨大な量の機能をカバーしているため、特定のケースごとに使用できる機能のリストを以下に示します。
教義/インフレクター
単語の単数形と複数形への縮小。 これは、実際にはイルミネーション/サポートの依存関係です。
ダニエルシュテュイルズ/ストリング
すべての文字列変換関数をカバーしています。 バージョン5.2までのイルミネーション/サポートで使用されます。
デュザンク/ナップザック
コレクションを操作します。 私が見つけた唯一のパッケージは、Laravelコレクションに匹敵します。
アナキアセン/ underscore-php
配列を操作するための関数を置き換えるには、ドット表記を使用します。 依存関係を使用せずに点線のドットをサポートする良い代替手段がわかりません。 このためにバニラPHPを書いているところです。 php7 +では、 array_get
代わりにnull合体演算子を使用できます。