Composer: required packages with differing levels of minimum-stability

PhpJsonLaravelLaravel 4Composer Php

Php Problem Overview


I have a composer file for a laravel installation with the following composer.json file:

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

I'm trying to add in the bundle for sentry. On sentry's website it says I can install it by adding the following to my composer.json file:

{
    "require": {
        "cartalyst/sentry": "2.0.*"
    },
    "minimum-stability": "dev"
}

I tried adding the new json object at the end of the current laravel one like so:

...
},
{
    "require": {
        "cartalyst/sentry": "2.0.*"
    },
    "minimum-stability": "dev"
}

When I run the composer update command to load the new package I get an error saying that the new object addition is not valid json.

If I add the cartalyst/sentry to the existing require object it cannot find the sentry package because the existing requires have a minimum-stability value of stable.

Is there a way of specifying the sentry package in a separate require object that has the minimum-stability setting of dev?

Php Solutions


Solution 1 - Php

The answer is just add @dev

{
    "require": {
        "cartalyst/sentry": "2.0.*@dev"
    },
}

You can read more about minimum stability settings here.

An alternative is to set your minimum-stability to dev, but tell composer you want to use stable whenever possible:

"minimum-stability": "dev",
"prefer-stable" : true

This basically means it will always use stable UNLESS there is no way to install a stable dependency, and therefore use dev.

Solution 2 - Php

You can also use other levels of stability, like alpha, beta combined with version selector.

Examples

With caret operator - maximum of version 2 allowing beta:

"cartalyst/sentry": "^2@beta"

Any version allowing alpha

"cartalyst/sentry": "*@alpha"

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionChris SchmitzView Question on Stackoverflow
Solution 1 - PhpLaurenceView Answer on Stackoverflow
Solution 2 - PhpPeterMView Answer on Stackoverflow