1. ホーム
  2. php

[解決済み】Composerのdevelop/productionスイッチで正しくデプロイする方法とは?

2022-04-14 02:49:40

質問

Composerには、開発中にのみいくつかの依存関係をロードするオプションがあり、本番環境(ライブサーバー)にはそのツールはインストールされません。これは、テスト、フェイクデータツール、デバッガなど、開発中にしか意味をなさないスクリプトに(理論的には)非常に便利です。

方法としては require-dev ブロックに、devで必要なツールを入れています。

"require-dev": {
    "codeception/codeception": "1.6.0.3"
}

を使用して、これらの依存関係をロードします。

composer install --dev

問題点 &; 質問

Composer は installupdate は、2013年に劇的に変化しました。 require-dev -dependenciesがデフォルトでインストールされるようになりました(!)、自由にcomposer.jsonに require-dev ブロックを作成し composer install を再現する。

デプロイの方法として最も一般的なのは、コンポーザーをプッシュすることであるため。 ロック (現在のコンポーザー設定を保持する)そして、その後に composer install を本番サーバーにインストールすると、開発用のものもインストールされます。

このような場合、どのようにデプロイするのが正しいのでしょうか? を使用せずに をインストールする必要がありますか?

<サブ 注:ここでは、奇妙なComposerのデプロイメントを明確にするために、正規のQ/Aを作成しようとしています。この質問を編集するのはご自由にどうぞ。

解決方法を教えてください。

なぜ

IMHO では、Composer が --dev フラグをデフォルトで使用します(インストール時 の更新)を行うようになりました。Composerは、このような動作が望まれるシナリオで実行されることがほとんどです。

Composerの基本的なワークフローは以下の通りです。

  • 新しいプロジェクトを開始します。 composer.phar install --dev , json と lock ファイルが VCS にコミットされます。
  • 他の開発者がプロジェクトで作業を開始:VCSのチェックアウトと composer.phar install --dev .
  • 開発者が依存関係を追加する。 composer.phar require <package> を追加します。 --dev のパッケージが必要な場合は require-dev セクションを作成します (そしてコミットします)。
  • その他は合わせて。(チェックアウトと) composer.phar install --dev .
  • 開発者が、より新しいバージョンの依存関係を求めている。 composer.phar update --dev <package> (とコミットする)。
  • 他の人も一緒に行く。(チェックアウトと) composer.phar install --dev .
  • プロジェクトがデプロイされました。 composer.phar install --no-dev

ご覧のように --dev フラグの方が --no-dev フラグは、特にプロジェクトに携わる開発者の数が増えてきたときに有効です。

本番デプロイ

dev"依存関係をインストールせずにこれをデプロイする正しい方法は何ですか?

さて、その composer.jsoncomposer.lock ファイルをVCSにコミットする必要があります。を省略してはいけません。 composer.lock なぜなら、そこには使用すべきパッケージのバージョンに関する重要な情報が含まれているからです。

本番環境でのデプロイ時に --no-dev フラグをComposerに渡します。

composer.phar install --no-dev

composer.lock ファイルには、dev-packages に関する情報が含まれている可能性があります。これは重要ではありません。その --no-dev フラグは、それらの開発パッケージがインストールされないようにします。

私がquot;production deploy"と言ったのは、productionで使用されることを目的としたdeployを意味します。を使うかどうかを議論しているのではありません。 composer.phar install は本番サーバーで行うべきか、それともレビューが可能なステージングサーバーで行うべきでしょうか?それは、この回答の範囲ではありません。私が言いたいのは、単に composer.phar install dev"の依存関係をインストールすることなく、quot;dev"をインストールすることができます。

オフトピック

--optimize-autoloader フラグを使用すると、クラスマップを生成してアプリケーションのオートロードを高速化することができます。

composer.phar install --no-dev --optimize-autoloader

または自動デプロイされたとき。

composer.phar install --no-ansi --no-dev --no-interaction --no-plugins --no-progress --no-scripts --optimize-autoloader

コードベースがそれをサポートしている場合、以下のように置き換えることができます。 --optimize-autoloader に対して --classmap-authoritative . 詳細はこちら こちら