我正在研究多个作曲家程序包和一个对我开发的所有程序包进行剂量查询的应用程序。
我想知道如何获得具有多个版本的软件包
我尝试了以下配置,但没有用
{
"minimum-stability" : "dev",
"require" : {
"varunsridharan/vsp-framework" : "^1.0",
"wponion/wponion" : "^1.0"
},
"require-dev" : {
"varunsridharan/vsp-framework" : "dev-master",
"wponion/wponion" : "dev-development"
}
}
当我运行composer install
或composer install --no-dev
时,我得到以下输出
Loading composer repositories with package information
Updating dependencies
[Composer\DependencyResolver\SolverProblemsException]
Problem 1
- The requested package varunsridharan/vsp-framework ^1.0 exists as varunsridharan/vsp-framework[dev-master] but these are rejected by your constraint.
Problem 2
- The requested package wponion/wponion ^1.0 exists as wponion/wponion[dev-development] but these are rejected by your constraint.
install [--prefer-source] [--prefer-dist] [--dry-run] [--dev] [--no-dev] [--no-custom-installers] [--no-autoloader] [--no-scripts] [--no-progress] [--no-suggest] [-v|vv|vvv|--verbose] [-o|--optimize-autoloader] [-a|--classmap-author
itative] [--apcu-autoloader] [--ignore-platform-reqs] [--] [<packages>]...
答案 0 :(得分:2)
原因是作曲家之所以拥有require
和require-dev
的原因是,允许开发人员安装软件包,这些软件包将使用不建议在生产中使用的软件包来更好地进行调试。通过在require-dev
上添加一个软件包,生产中将不需要此软件包。
例如如果您想优化查询,请查看是否存在任何n + 1查询问题,等等,您可能希望安装php-debugbar
来向您显示此信息,但是在生产中使用此信息可能会暴露您的查询并提供敏感信息对坏蛋。
require
中包含的软件包将始终在开发和生产中安装,这就是您看到错误The requested package xxxxx exists as xxxxx[dev-development] but these are rejected by your constraint
的原因。
要在 DEV 和 PROD 中使用不同的软件包,您需要为每个环境使用不同的composer.json文件,如@George所说。
您可以有一个composer.json
文件作为生产作曲家,另一个composer-dev.json
可以用于开发。
在您的本地环境中,您需要将 COMPOSER env变量的值设置为 composer-dev.json 。
简单的方法是运行像这样的作曲家:COMPOSER=composer-other.json php composer.phar install
如果您需要一个新的软件包,则需要运行两次命令,一次正常运行,一次是通过在composer之前添加COMPOSER = composer-other.json来运行一次,以确保将软件包同时添加到dev和production中
PS,我不知道为什么需要不同的软件包来进行开发和生产,但是建议在dev和prod中使用相同版本的软件包,因为使用不同版本的软件包可能会带来错误。
答案 1 :(得分:1)
您可以尝试在开发环境中更改composer.json文件。参见Composer
COMPOSER=composer-dev.json php composer install