编写器require(正常)并在一个CLI命令中需要--dev

时间:2019-02-21 11:29:54

标签: composer-php

如何在一个命令中使用composer require vendor/normal_packagecomposer require vendor/dev_package --dev?我想要一个需要2个程序包的CLI命令,一个程序包放入“普通” require,另一个程序包放入require-dev部分。

背景信息:我有一个像这样的composer.json文件:

{
    "require": {
        "drupal/core": "^8.6.7"
    },
    "require-dev": {
        "webflo/drupal-core-require-dev": "^8.6.7"
    }
}

这两个软件包始终需要同时更新。通常我只是做一个composer update drupal/core webflo/drupal-core-require-dev --with-dependencies,效果很好。

但是有时候我明确地想要一个新的最低版本,并且我想在shell脚本中执行它,以便一次更新多个项目(无需手动编辑composer.json)。我不能运行这两个命令
composer require drupal/core:^8.6.10 composer require webflo/drupal-core-require-dev:^8.6.10
连续,因为它们彼此依赖。

我如何在一个命令中需要一个普通软件包和一个dev软件包?

1 个答案:

答案 0 :(得分:0)

如果您的composer.json中有循环依赖项,并且该依赖项分布在requirerequire-dev之间,则当前无法使用来更新和设置新的最低版本只是一个命令。但是我发现了一种解决方法,可以通过使用带有--no-update选项的require-command来节省 的时间。

以下是我当前使用的代码(drupal/core是常规软件包,webflo/drupal...是dev软件包,版本^8.7.1是我要强制执行的新的最低版本):

# include both packages in the require section, but don't update
# this is much faster than normal require with update
composer require --no-update drupal/core:^8.7.1 webflo/drupal-core-require-dev:^8.7.1

# move the dev package back into the require-dev section
composer require --dev --no-update webflo/drupal-core-require-dev:^8.7.1

# now run the update, this will take some time (you can not use --no-dev here)
composer update drupal/core webflo/drupal-core-require-dev:^8.7.1 more_stuff/*

# optional: remove the dev-packages again (this is quite fast too)
composer install --no-dev

我不会将问题标记为已回答,因为这只是节省时间的解决方法,而不是真正的解决方案。