Composer не будет устанавливать пакеты "require-dev"

Я пытаюсь сделать некоторые разработки с Laravel, и по какой-то причине я не могу установить его для установки каких-либо пакетов, перечисленных в разделе require-dev в любом из файлов зависимостей composer.json. AFAIK, зависимости от разработчиков должны быть установлены по умолчанию. Я пробовал его с и без флага --dev на composer install. Я также попытался удалить содержимое vendors/ и удалить composer.lock и ~/.composer и переустановить все зависимости с нуля, но все равно не повезло. Я также пробовал различные итерации команды composer update.

Например, в vendor/laravel/framework/composer.json он перечисляет следующие значения:

"require-dev": {
    "aws/aws-sdk-php": "2.4.*",
    "iron-io/iron_mq": "1.4.*",
    "pda/pheanstalk": "2.1.*",
    "mockery/mockery": "0.8.0",
    "phpunit/phpunit": "3.7.*"
},

Ни один из них не устанавливается. Любые идеи, что мне не хватает? Здесь мой основной файл composer.json, FWIW.

{
"name": "laravel/laravel",
"description": "The Laravel Framework.",
"keywords": ["framework", "laravel"],
"license": "MIT",
"require": {
    "laravel/framework": "4.0.*",
    "rncryptor/rncryptor-php": "1.*"
},
"autoload": {
    "classmap": [
        "app/commands",
        "app/controllers",
        "app/models",
        "app/libraries",
        "app/database/migrations",
        "app/database/seeds",
        "app/tests/TestCase.php"
    ]
},
"scripts": {
    "post-install-cmd": [
        "php artisan optimize"
    ],
    "pre-update-cmd": [
        "php artisan clear-compiled"
    ],
    "post-update-cmd": [
        "php artisan optimize"
    ],
    "post-create-project-cmd": [
        "php artisan key:generate"
    ]
},
"config": {
    "preferred-install": "dist"
},
"minimum-stability": "dev"
}

Я запустил composer self-update, поэтому это должна быть последняя версия. Запуск composer --version показывает это:

Composer version b20021cc6aa113069e4223b78d0074a1fc7dd4e8 2014-01-14 16:22:09

Ответ 1

Composer только устанавливает пакеты, перечисленные как "require-dev" вашего основного файла composer.json, и если этим пакетам требуется что-то другое, тогда устанавливаются только их пакеты "require", но не их "require-dev" ".

На самом деле это хорошо. Если вы хотите разработать пакет, вы клонируете свой репозиторий, установите все необходимое для разработки и готовы внести свой вклад. Но если вам нужен пакет для вашего собственного программного обеспечения, это нецелесообразно для разработки этого конкретного пакета - это вариант использования собственного программного обеспечения.

Таким образом, tl; dr: Composer устанавливает только требования к компоновке composer.json, а не любые зависимости.

Ответ 2

Существует решение для установки пакетов-разработчиков-разработчиков поставщика в ваш проект.

https://github.com/wikimedia/composer-merge-plugin

Добавьте это в свой проект composer.json вашего проекта

{
    "require": {
        "wikimedia/composer-merge-plugin": "dev-master"
    },
    "extra": {
        "merge-plugin": {
            "include": [
                "vendor/laravel/framework/composer.json"
            ]
            "recurse": true,
            "replace": false,
            "ignore-duplicates": false,
            "merge-dev": true,
            "merge-extra": false,
            "merge-extra-deep": false,
            "merge-scripts": false
        }
    }
}

Важно иметь "merge-dev": true, запустить

composer update

И в вашем проекте будут установлены пакеты require-dev "vendor/laravel/framework/composer.json".