我的软件包mailbase中有两个新的发行版v1.0.0
和v0.2.0
。
v1.0.0
的打包约束为^ 7.0
"laravel/framework": "^7.0"
v0.2.0
具有程序包约束
"laravel/framework": "^5.0|^6.0"
但是当我安装此软件包时
composer require tkeer/mailbase
无论laravel版本(laravel5,laravel6或laravel7)如何,作曲家始终会安装v1.0.0
。应该为laravel6和laravel5安装v0.2.0
吗?
答案 0 :(得分:1)
作曲家总是选择要安装的最新版本
此处是通过composer安装软件包的语法
composer require vendor/package:version
指定要安装的版本
composer require tkeer/mailbase:0.2.0
答案 1 :(得分:0)
实际上您的plugins composer.json告诉了这个
V1.0.0只能在Laravel 7.0及更高版本上运行
v0.2.0可以从5.0到6.0在所有Laravel上运行 v0.2.0可以在从6.0到7.0的所有Laravel上运行
从版本6.0到7.0可以添加^ 6.0品牌
如果我无法解释这一点,请查看此URL以获取更多信息
https://getcomposer.org/doc/articles/versions.md#writing-version-constraints
"require": {
"vendor/package": "1.3.2", // exactly 1.3.2
// >, <, >=, <= | specify upper / lower bounds
"vendor/package": ">=1.3.2", // anything above or equal to 1.3.2
"vendor/package": "<1.3.2", // anything below 1.3.2
// * | wildcard
"vendor/package": "1.3.*", // >=1.3.0 <1.4.0
// ~ | allows last digit specified to go up
"vendor/package": "~1.3.2", // >=1.3.2 <1.4.0
"vendor/package": "~1.3", // >=1.3.0 <2.0.0
// ^ | doesn't allow breaking changes (major version fixed - following semver)
"vendor/package": "^1.3.2", // >=1.3.2 <2.0.0
"vendor/package": "^0.3.2", // >=0.3.2 <0.4.0 // except if major version is 0
}
答案 2 :(得分:0)
在运行composer require tkeer/mailbase
时,没有任何其他版本限制,Composer会计算该软件包的哪些版本与当前其他所需的软件包兼容。已安装最新版本。
在您的示例中:如果您已经安装了Laravel v5或v6,则要安装的软件包的最新可能版本是v0.2.0,因为v1.0.0仅与Laravel v7兼容。同样,如果安装了Laravel v7,则安装了软件包的v1.0.0,因为先前版本v0.2.0与Laravel v7不兼容。
如果在安装Laravel v5或v6时使用composer require tkeer/mailbase:"v1.0.0"
,则将抛出错误消息,因为此软件包不兼容。