web-dev-qa-db-ja.com

composer.jsonのrequireセクションとrequire-devセクションの違いは何ですか?

私は作曲家を使い始めていますが、それについてはほとんど知識がなく、Webアプリケーション開発の経験もほとんどありません。

Nettuts +チュートリアル をただ歩くだけなので、作曲家に関する基本的な質問があります。

{
  "require": {
    "laravel/framework": "4.0.*",
    "way/generators": "dev-master",
    "Twitter/bootstrap": "dev-master",
    "conarwelsh/mustache-l4": "dev-master"
  },
  "require-dev": {
    "phpunit/phpunit": "3.7.*",
    "mockery/mockery": "0.7.*"
  },
  "autoload": {
    "classmap": [
      "app/commands",
      "app/controllers",
      "app/models",
      "app/database/migrations",
      "app/database/seeds",
      "app/tests/TestCase.php"
    ]
  },
  "scripts": {
    "post-update-cmd": "php artisan optimize"
  },
  "minimum-stability": "dev"
}
  1. 「require-dev」の部分に表示されるものはすべて、composer install --devでのみダウンロードおよびインストールされますか?
  2. 作曲家のドキュメントの一部を読みましたが、それでも「require-dev」の部分がある理由がわかりませんか?パッケージの特定のバージョンを取得したいのではなく、常に最新の安定バージョンを取得したいのですか?
77
Artisan

さまざまな環境

通常、ソフトウェアは異なる環境で実行されます。

  • development
  • testing
  • staging
  • production

異なる環境での異なる依存関係

composer.jsonrequireセクションで宣言されている依存関係は、通常、アプリケーションまたはパッケージを実行するために必要な依存関係です。

  • staging
  • production

require-devセクションで宣言された依存関係は、通常、

  • developing
  • testing

環境。

たとえば、アプリケーションを実際に実行するために使用されるパッケージに加えて、ソフトウェアの開発には次のようなパッケージが必要になる場合があります。

  • friendsofphp/php-cs-fixer(コーディングスタイルの問題を検出および修正するため)
  • squizlabs/php_codesniffer(コーディングスタイルの問題を検出および修正するため)
  • phpunit/phpunit(テストを使用して開発を推進するため)
  • 等.

展開

現在、developmentおよびtesting環境では、通常、次を実行します。

$ composer install

productiondevelopmentの両方の依存関係をインストールします。

ただし、stagingおよびproduction環境では、アプリケーションの実行に必要な依存関係のみをインストールし、展開プロセスの一部として、通常は次を実行します。

$ composer install --no-dev

production依存関係のみをインストールします。

意味論

言い換えれば、セクション

  • require
  • require-dev

実行時にインストールするパッケージをcomposerに示します

$ composer install

または

$ composer install --no-dev

以上です。

アプリケーションまたはパッケージが依存するパッケージの開発依存関係はインストールされません

参考のため、

77
localheinz
  1. 作曲家のマニュアル によると:

    require-dev(ルートのみ)

    このパッケージの開発やテストの実行などに必要なパッケージをリストします。ルートパッケージのdev要件はデフォルトでインストールされます。 installまたはupdateは、dev依存関係のインストールを防ぐ--no-devオプションをサポートしています。

    したがって、composer installを実行すると、開発の依存関係もダウンロードされます。

  2. その理由は実際には非常に簡単です。特定のライブラリに貢献する場合、テストスイートまたは他の開発ツール(symfonyなど)を実行することができます。ただし、このライブラリをプロジェクトにインストールする場合、これらの開発依存関係は必要ない場合があります。すべてのプロジェクトにテストランナーが必要なわけではありません。

56
Florent

composerサイトから(十分に明らかです)

require#

このパッケージに必要なパッケージをリストします。これらの要件を満たさない限り、パッケージはインストールされません。

require-dev(ルートのみ)#

このパッケージの開発やテストの実行などに必要なパッケージをリストします。ルートパッケージのdev要件はデフォルトでインストールされます。インストールまたは更新は、dev依存関係のインストールを防ぐ--no-devオプションをサポートします。

Composerでrequire-devを使用すると、プロジェクトの開発/テストに必要であるが本番には必要ない依存関係を宣言できます。 (gitを使用して)本番サーバーにプロジェクトをアップロードすると、require-dev部分は無視されます。

author および this post によって投稿されたこの回答も確認してください。

18
The Alpha

require sectionこのセクションには、本番環境にインストール/必要とされるより良い候補であるパッケージ/依存関係が含まれています。

require-devセクション:このセクションには、開発者がコード(or for the experiment purpose on her local machine and she wants these packages should not be installed on the production environment.)をテストするために使用できるパッケージ/依存関係が含まれています

1
MKJ

一般的なルールは、ローカル環境などの開発(dev)環境でのみrequire-devセクションからパッケージを取得することです。

require-devセクションのパッケージは、アプリのデバッグ、テストの実行などに役立つパッケージです。

stagingおよびproduction環境では、おそらくrequireセクションのパッケージのみが必要です。

とにかく、どの環境でもcomposer install --no-devおよびcomposer update --no-devを実行できます。コマンドは、 requiredセクションはrequire-devからではありませんが、おそらくstagingおよびプロダクション環境はローカルではありません。

理論的には、すべてのパッケージをrequireセクションに入れることができますが、何も起こりませんが、次の理由で実稼働環境でパッケージを開発することは望ましくありません。

  1. 速度
  2. デバッグ情報を公開する可能性

require-devの適切な候補は次のとおりです。

"filp/whoops": "^2.0",
"fzaninotto/faker": "^1.4",
"mockery/mockery": "^1.0",
"nunomaduro/collision": "^2.0",
"phpunit/phpunit": "^7.0"

上記のパッケージが何をしているのかを見ることができ、本番環境でそれらが必要ない理由がわかります。

詳細はこちら: https://getcomposer.org/doc/04-schema.md

0
fico7489