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
?
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.
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"
From the composer documentation:
To allow various stabilities without enforcing them at the constraint level however, you may use stability-flags like @ (e.g. @dev) to let Composer know that a given package can be installed in a different stability than your default minimum-stability setting.
https://getcomposer.org/doc/articles/versions.md#stability-constraints
Success story sharing
"symfony": { "allow-contrib": false, "require": "4.2.*"
thus if I issued your settings/configuration while not having composer.lock deleted, keeping it, those settings were reverted, so it might be necessary to delete the composer.lock or issue the composer update command which though might have additional undesired effectscomposer require cartalyst/sentry:2.0.*@dev
.