Composer:需要具有不同最小稳定性级别的必需包。

77

我有一个用于 Laravel 安装的 composer 文件,其中包含以下 composer.json 文件:

{
    "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"
}

我正在尝试添加Sentry的bundle。在Sentry的网站上,它说我可以通过将以下内容添加到我的composer.json文件来安装它:

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

我尝试将新的JSON对象添加到当前Laravel对象的末尾,如下所示:

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

当我运行composer update命令加载新包时,出现错误提示说新对象添加不是有效的json。

如果我将cartalyst/sentry添加到现有的require对象中,它无法找到sentry包,因为现有的requires具有stable的最小稳定值。

是否有一种方法可以在具有dev最小稳定设置的单独require对象中指定sentry包?

3个回答

169
答案就是加上@dev
{
    "require": {
        "cartalyst/sentry": "2.0.*@dev"
    },
}

您可以在此处阅读有关最低稳定性设置的更多信息

另一种选择是将您的最低稳定性设置为dev,但告诉composer尽可能使用稳定版本:

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

这基本上意味着它总是会使用稳定版,除非没有办法安装稳定的依赖关系,因此会使用开发版。


我遇到了Symfony框架的另一个限制,即最高允许版本被限制为"symfony": { "allow-contrib": false, "require": "4.2.*"。因此,如果我在保留composer.lock文件的情况下使用您的设置/配置,这些设置将被还原,因此可能需要删除composer.lock文件或执行composer update命令,尽管这可能会产生其他不必要的影响。 - FantomX1
3
如果有人想知道从 CLI 视角看会是什么样子,我想补充一下:需要运行 composer require cartalyst/sentry:2.0.*@dev 命令。 - jtompl

4

你也可以使用其他的 稳定级别, 比如 alpha, beta, 以及版本 选择器 的组合。

示例

通过插入符号操作符 - 允许最高版本为2且包括beta版本:

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

任何允许使用Alpha通道的版本
"cartalyst/sentry": "*@alpha"

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接