ホームページ > バックエンド開発 > PHPチュートリアル > 作曲家グローバルは有害と見なされる必要がありますか?

作曲家グローバルは有害と見なされる必要がありますか?

Joseph Gordon-Levitt
リリース: 2025-02-15 13:24:12
オリジナル
389 人が閲覧しました

Composer Global Require Considered Harmful?

キーポイント

  • グローバルにインストールされているパッケージに依存関係がない限り、複数のプロジェクトに使用されるパッケージをインストールするための悪い慣行と見なされています。これは、パッケージが同じスペースを共有すると、依存関係の競合が発生する可能性があるためです。 composer global require
  • 別のソリューションは、各コマンドラインツールを
  • 、手動で管理するcomposer require、またはバイナリファイルを使用して独自のローカルプロジェクトにインストールすることです。ただし、これは複雑さと退屈さを追加することができます。グローバルコマンドへの推奨される変更は、「グローバル」であるが孤立したプロジェクトが特定の場所にインストールされ、ベンダーとビンディレクトリが通常の場所に表示される場合があります。 $PATH
  • 新しいツールCGR(Composer Global Reams)は、グローバル実装の代替として開発されました。グローバルな依存関係の問題を回避し、各パッケージの孤立したインストールを作成します。ただし、このツールはまだ概念実証段階にあり、変更される可能性があります。テストすることをお勧めしますが、現時点ではあまり依存しすぎないでください。
以前に作曲家のベストプラクティスについて議論しましたが、複数のプロジェクト(特にコマンドラインツール)で使用できるパッケージをインストールする際に、常に

を使用して提唱してきました。それから、ある日、私はこの議論に出会いました。 composer global require

Composer Global Require Considered Harmful? 要するに、ほとんどの人は、グローバルにインストールされたパッケージに依存関係がない限り、グローバルな要求は悪い練習であると考えているようです。技術的には、これはすべてのプロジェクトに単一の環境を使用するときに理にかなっていますが、その議論でコメントしたように、各プロジェクトが仮想マシンまたはDockerのような適切に孤立した環境を使用する場合、この問題は無関係であり、全体的な状況は実際にはありませんダメージを引き起こします。

この問題の推奨ソリューションは、

opです

別の方法として、ユーザーは

を使用して各コマンドラインツールを独自のローカルプロジェクトにインストールし、
またはバイナリファイルを手動で管理する必要があります(たとえば、

binディレクトリから既に存在することにより、シンボリックリンクを作成する必要があります)。 composer require $PATH 私にとって、これはまったく受け入れられない合併症です。作曲家は、使いやすく、パッケージ管理の初心者に優しいものになるため、常にPHPの誇りでした。シンボルリンクを周囲に作成する必要があります(特に、Windowsのような非シンリンクのオペレーティングシステムを考慮すると)。次に、OPはさらに、グローバルコマンドがどのように機能するかを変更することを示唆しています:$PATH

「グローバル」が孤立したプロジェクトは、そのベンダーとビンディレクトリに通常の場所に表示され、

ディレクトリの内容を~/.composer/global/[something]でミラーリングできます(Symlinkを通じて) 、またはより良いオプションは~/.composer/global/[something]/binである場合があります。文字列は、さまざまな方法で選択できます。 ~/.composer/vendor/bin ~/.composer/bin [something]私はこのアプローチに完全に同意します、それは両方の世界の中で最高のようです。明らかに、これはいくつかの後方互換性の問題を引き起こす可能性がありますが、それは作曲家のバージョン2.0で発生しないという意味ではありません。 Taylor Otwellは、以下のこの見解にさらに応答します:org/project ~/.composer/global/org/project/vendor/org/project

完全に同意します。グローバルにインストールされた各コンポーザーを独自の検疫ディレクトリにインストールし、他のグローバルにインストールされているパッケージと潜在的に矛盾するのではなく、独自の検疫依存関係を持つことができるのは驚くべきことです。

この後、The True Open Source Spiritで、OPは代替グローバル実装を別のツールに構築します:Cgr。それがどのように機能するか見てみましょう。

CGR - Composer Globalには代替

が必要です

ホームステッドの改善されたインスタンスで次のすべてのコマンドを実行しますCGRを開始するには、グローバルパッケージとしてインストールします。 作曲家のビンフォルダーがパス変数にない場合は、

上記のコマンドは、ComposerのGlobal Bin Directoryのパスを使用して

環境変数を拡張します(Homesteadのデフォルトの場所が改善されました - 場所は異なる場合があります)。 2番目のコマンドは、CGRが使用するBINディレクトリを構成し、3番目のコマンドはこれらの変更をロードします。また、これらは、端子インターフェイスがそのユーザーとして実行されるたびに自動的にロードされます(私の場合は、Vivevive

を使用して)。

composer global require consolidation/cgr
ログイン後にコピー
ログイン後にコピー
その後、CGRにアクセスして

を実行できます。これにより、Composerの一般的なヘルプファイルが出力されます。

グローバルコンポーザーパッケージを適切にインストールします
echo "export PATH=$PATH:$HOME/.composer/vendor/bin/" >> ~/.bashrc
echo "export CGR_BIN_DIR=$HOME/.composer/vendor/bin" >> ~/.bashrc
source ~/.bashrc
ログイン後にコピー

Homesteadが改善された場合、有用なエイリアスが構成されています。このエイリアスは、$PATHタイピングがvagrant sshに拡張されます。これは、各プロジェクトに

をインストールするときに非常に便利なため、ルートフォルダーから実行できます。 PHPunitのグローバルインストールをテストするには、最初にこのエイリアスを削除する必要があり(対応するラインに

にコメントします)、シェルを終了して再入力して、エイリアスがリロードされるようにします。次に、バージョン出力を使用してPHPunitのこの新しいグローバルインストールを実行すると、次のようなものが生成されるはずです。 cgr

2つの互換性のないパッケージをインストールしてみましょう。

cgr phpunit/phpunit
ログイン後にコピー
もちろん、それらはすべて正常にインストールできます。彼らが働いているかどうかを確認しましょう。

composer global require consolidation/cgr
ログイン後にコピー
ログイン後にコピー

すべてがうまくいきます!依存関係の不一致のために以前に矛盾していたグローバルパッケージは、今では並んで共存し、問題なくオペレーティングシステム全体で使用できるようになりました!

このツールは何をすべきか/できないものは何ですか?

場合によっては、Composerプラグインをインストールする場合があります。制限セクションで述べたように、これらのプラグインは、各グローバルパッケージを独自のフォルダーにインストールし、独自の依存関係ツリーを持っているため、すべてのグローバルプロジェクトでグローバルに利用できません。したがって、Composerの共通の動作を変更するプラグインをインストールする場合は、CGRの代わりにcomposer global requireを使用する必要があります。たとえば、CGR自体はそのようなプラグインです。

次は何ですか?

テスト、テスト、テスト! Global Reackコマンドの頻繁なユーザーである場合、この新しいツールをテストし、グローバルなニーズを満たしている金額と改善があるかどうかについてのフィードバックを与えることを強くお勧めします。

このツールは現在、概念の証明のみであり、実装が名前が変更され、再パッケージ化され、最終的には作曲家のコアに統合されている場合があることに注意してください。言い換えれば、できる限り使用しますが、当面は過度に依存しないでください。

グローバルパッケージがインストールされている間、composer global requireについてどう思うか教えてください。多くの人が今考えているのと同じくらい有害ですか?それとも、それは慎重であり、孤立した開発環境を持っているだけの問題ですか?ほかに何か?以下にコメントを表明してください!

作曲家グローバルに関するFAQは

です

作曲家のグローバルな要件を使用することが有害と見なされるのはなぜですか?

作曲家のグローバルな要件は、依存関係の競合につながる可能性があるため、有害と見なされます。パッケージをグローバルにインストールすると、それらはすべて同じスペースを共有します。つまり、同じ依存関係のセットを共有します。 2つのパッケージに同じ依存関係の異なるバージョンが必要な場合、競合やエラーにつながる可能性があります。このような問題を回避するために、各プロジェクトの独自の依存関係セットをインストールすることをお勧めします。

Composer Globalの代替手段は何ですか?

Composerのグローバル要件を使用しないでください。必要な各ツールに新しいComposerプロジェクトを作成できます。これにより、各ツールには独自の依存関係があり、競合のリスクが低下します。また、CGRなどのツールを使用して、各パッケージに分離されたインストールを作成し、グローバルな依存関係の問題を回避できます。

CGRグローバルな依存関係の問題を回避するにはどうすればよいですか?

CGR(Composer Global Reams)は、各パッケージに孤立したインストールを作成するためのツールです。これは、各パッケージとその依存関係が独自の個別のディレクトリにインストールされ、異なるパッケージの依存関係間の競合のリスクを回避することを意味します。これにより、Composer Global Reamsを使用するためのより安全な代替手段になります。

CGRのインストールと使用方法は?

cgrをインストールするには、コマンドcomposer global require consolidation/cgrを使用できます。インストール後、CGRを使用して、Composerのグローバル要件を使用できます。たとえば、パッケージをインストールするには、コマンドcgr require package-nameを使用できます。

作曲家のローカルインストールとグローバルインストールの違いは何ですか?

作曲家では、ローカルインストールとは、パッケージとその依存関係がプロジェクトのディレクトリにインストールされていることを意味します。これは、依存関係の競合を回避するため、パッケージをインストールする推奨方法です。一方、グローバルインストールは、グローバルディレクトリにパッケージとその依存関係をインストールします。これにより、異なるパッケージに同じ依存関係の異なるバージョンが必要な場合、競合につながる可能性があります。

作曲家のグローバル依存関係を管理する方法は?

作曲家のグローバル依存関係を管理することは、紛争のリスクがあるため困難な場合があります。ただし、CGRのようなツールは、各パッケージの孤立したインストールを作成することで役立ちます。また、必要なツールごとに新しいコンポーザープロジェクトを作成し、各ツールに独自の依存関係セットがあることを確認することで、グローバル依存関係を管理することもできます。

作曲家にローカルとグローバルの両方のインストールを使用できますか?

はい、Composerでローカルとグローバルの両方のインストールを使用できます。ただし、依存関係の競合を回避するために、可能な場合はローカルインストールを使用することをお勧めします。グローバルにパッケージを使用する必要がある場合は、CGRなどのツールを使用して孤立したインストールを作成することを検討してください。

作曲家の依存関係を誤って管理するリスクは何ですか?

作曲家の依存関係を誤って管理すると、競合やエラーにつながる可能性があります。 2つのパッケージが異なるバージョンの同じ依存関係を必要とする場合、問題のデバッグが困難になる可能性があります。また、依存関係の異なるバージョンが異なる機能と動作を持つ可能性があるため、アプリケーションの予期しない動作を引き起こす可能性があります。

作曲家の依存関係の競合を解決する方法は?

Composerの依存関係の競合を解決するには、競合が解決する可能性があるため、パッケージを最新バージョンに更新しようとすることができます。これがうまくいかない場合は、使用しているパッケージを再考し、矛盾する依存関係がない代替品を見つけたいかもしれません。 CGRのようなツールは、各パッケージの孤立したインストールを作成することでも役立ちます。

作曲家の依存関係を最新に保つにはどうすればよいですか?

作曲家の依存関係を最新の状態に保つには、composer updateコマンドを使用できます。これにより、composer.jsonファイルで指定されたバージョンの制約に基づいて、すべてのパッケージが最新バージョンに更新されます。また、新しいバージョンで使用できるパッケージを確認することもできます。 composer outdated

以上が作曲家グローバルは有害と見なされる必要がありますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート