composer updateとcomposer installの違いは何ですか?


回答:


295

作曲家の更新

composer update で指定されているように依存関係を更新します composer.json

たとえば、このパッケージを依存関係として必要とする場合:

"mockery/mockery": "0.9.*",

実際に0.9.1パッケージのバージョンをインストールした場合、実行composer updateするとこのパッケージがアップグレードされます(たとえば0.9.2、すでにリリースされている場合は)

詳細composer updateは:

  • 読んだ composer.json
  • 不要になったインストール済みパッケージを削除する composer.json
  • 必要なパッケージの最新バージョンの可用性を確認してください
  • パッケージの最新バージョンをインストールする
  • composer.lockインストールされたパッケージのバージョンを保存するための更新

作曲家のインストール

composer install何も更新しません。composer.lockファイルに指定されているすべての依存関係をインストールします

詳細に:

  • composer.lockファイルが存在するかどうかを確認します(存在しない場合は、実行composer-updateして作成します)
  • composer.lockファイルを読む
  • composer.lockファイルで指定されたパッケージをインストールします

インストールするタイミングと更新するタイミング

  • composer update主に「開発フェーズ」で使用され、composer.jsonファイルで指定した内容に従ってプロジェクトパッケージをアップグレードします。

  • composer install 主に「デプロイ段階」で使用され、composer updateによって作成されたcomposer.lockファイルに格納されている同じ依存関係を使用して、本番サーバーまたはテスト環境にアプリケーションをインストールします。


5
ロックファイルがなく、composer installを呼び出すとどうなるかについては説明しませんでした。ところで素敵な説明。
user1954544 2017年

1
いつかあなたを噛むかもしれない重要なこと-ロックファイルは再帰的ではありません。依存関係が緩やかに定義されているパッケージがあり、クリーンなマシンでプロジェクトのクリーンなコピーを入手した場合、ネストされた依存関係の異なるバージョンがインストールされる可能性があり、新しいバグが含まれたり、変更が破壊されたりする可能性があります。特に継続的インテグレーションとビルドサーバーに関連します。解決策-ネストされた問題のあるパッケージを探し、修正された適切なバージョンをjsonとロックファイルに追加します。
JustAMartin 2017

composer global updateローカルシステムのグローバルリポジトリの依存関係を更新します(COMPOSER_HOME
環境

1
次に、運用サーバーで特定のパッケージを安全に更新するにはどうすればよいですか?
ミシェル

@Michel最初にcomposer updateローカルシステムで実行してアプリケーションをテストし、次にcomposer.lockを運用サーバーにアップロードして実行する必要がありますcomposer install
Amin Shojaei

58

実行composer installすると、ロックファイルが検索され、そこに含まれているものがインストールされます。ロックファイルが見つからない場合は、が読み込まれcomposer.json、その依存関係がインストールされて、ロックファイルが生成されます。

実行composer updateするとcomposer.json、単にを読み取り、依存関係をインストールしてロックファイルを更新します(または新しいロックファイルを作成します)。


23

composer install

  1. IFがcomposer.lockが存在しません。
    • composer.lockファイルから依存関係を処理してインストールします。
  2. もしcomposer.lockではないが存在します。
    • パッケージのインストールをから処理しますcomposer.json
    • composer.lockインストールされたパッケージに基づいてファイルを作成します。

に従ってcomposer help install::

installコマンドcomposer.lockは、現在のディレクトリからファイルを読み取り、それを処理して、そのファイルで説明されているすべてのライブラリと依存関係をダウンロードしてインストールします。ファイルが存在しない場合composer.jsonは、同じことを探して実行します。


composer update

  1. composer.jsonファイルの依存関係を処理します(インストール、更新、削除)。
  2. composer.lock変更に応じてファイルを作成または更新します。

に従ってcomposer help update::

updateコマンドcomposer.jsonは、現在のディレクトリからファイルを読み取って処理し、すべての依存関係を更新、削除、またはインストールします。


参照:Composer:ロックファイルのすべて


composerインストールポイント3は意味がありません。.lockファイルがすでに存在する場合は、それを読み取るだけで「更新」することはありません。それはまだ存在しない場合にのみ作成されます。..
ベン・

@ベンポイントを明確にしたので、それが意味をなすかどうか教えてください。
kenorb

3

間の最良の違いcomposer updatecomposer install

作曲家のインストール

依存関係を追加するには、手動でcomposer.jsonファイルに追加する必要があります。

composer.lockファイルが存在する場合は、このファイルに指定されているものを正確にインストールします

  • それ以外の場合は、composer.jsonファイルを読んで、インストールする必要のある依存関係を調べます。
  • プロジェクト(インストールされている依存関係)の情報を含むcomposer.lockを記述します

このコマンドで更新されるコンポーネントはありません。

作曲家の更新

依存関係を追加または削除するには、手動でcomposer.jsonファイルに追加する必要があります

  • composer.lockファイルは無視されます
  • composer.jsonファイルの依存関係がインストールおよび更新されます(依存関係がインストールされていない場合はダウンロードされます)

できない場合(または実際に簡単なライブラリの追加または削除方法がわからない場合は、ファイルのrequireプロパティに依存関係とバージョンの名前を追加するだけ)composer.jsonファイルを手動で変更するか、代わりにコマンドラインを使用することをお勧めします。composerには、このための特別な機能があります。

作曲家が必要

たとえば、コマンドラインで依存関係を追加したい場合は、単に実行します

composer require twig/twig

  • composer.jsonファイルは自動的に変更され、新しい依存関係が追加されます
  • 依存関係がプロジェクトにダウンロードされます

作曲家削除

未使用の依存関係を削除したい場合は、単純に実行します。

composer remove twig/twig --update-with-dependencies

  • 小枝は彼のすべての依存関係とともに削除されます

1

作曲家のインストール

if(composer.lock existed){
   installs dependency with EXACT version in composer.lock file
} else {
   installs dependency with LATEST version in composer.json
   generate the composer.lock file
}

作曲家の更新

composer update = remove composer.lock -> composer install

2つのコマンドが必要な理由。composer.lockで説明できると思います。

想像して、私たちはしないでください持っているcomposer.lockとしてcomposer.json、そこに依存性があります"monolog/monolog": "1.0.*""monolog/monolog": "^1.0"
次に、いくつかのケースがあります

  • 現在の依存関係バージョン(例:1.0.0)で今日はうまく機能していますが、数か月後、依存関係の更新(例:1.0.1)といくつかのバグがある可能性があります
  • 別のチームメンバーは、実行composer install時間が異なる場合、依存関係のバージョンが異なる場合があります。

composer.jsonなどで常にEXACTバージョンを使用するとどうなり"monolog/monolog": "1.0.1"ますか?依存関係のメインバージョンを追跡するだけで、依存関係の依存関係のバージョンを追跡することはできないため、
依然として必要です。composer.lockcomposer.json

依存関係のすべての依存関係がEXACTバージョンも使用している場合はどうなりますか?
EXACTバージョンを使用するすべての依存関係から始めて、気にしないと想像してみてくださいcomposer.lock。ただし、数か月後、新しい依存関係を追加(または古い依存関係を更新)し、この依存関係の依存関係はEXACTバージョンを使用しません。それからcomposer.lock、最初は気にかける方がいいです。

その上、正確なバージョンよりもセマンティックバージョンの利点があります。開発中に依存関係を何度も更新する可能性があり、ライブラリにはバグ修正などの小さな変更が含まれていることがよくあります。その後、セマンティックバージョンを使用する依存関係をアップグレードする方が簡単です。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.