使用包管理器Composer时,是否可以为不需要的包指定所需的版本?
例如: 假设我有一个博客模块和一个小部件模块。这两个模块都可以正常工作,并且不需要其他模块。
但是,最新版本的博客模块仅适用于小部件模块的2.x版本。因此,如果将widget模块添加到项目的composer.json中,则Composer应该只允许它安装2.x版本,因为安装较低版本会破坏博客模块。
我知道Composer的'建议'功能,但它似乎没有强制执行版本。
这可能吗?如果是这样,怎么样?
答案 0 :(得分:2)
如果博客和窗口小部件没有直接的依赖关系,那么如果窗口小部件存在于错误的版本中,则博客不应该中断。修复博客模块以接受任何版本的小部件。使用任何必要的东西来检测窗口小部件是否存在,检查它的版本,并应用必要的修复以接受任何版本。
如果你不能这样修复它,另一种方法是将小部件添加为博客的直接依赖。显然已经有一些检测,因为博客可以使用或不使用小部件。总是安装小部件有什么问题?
使用conflict
可能有一个解决方案 - 在这里您可以说明如果要安装该版本中的软件包而必须不存在的软件包(例如blog 4.2.7
与widget 1.*
冲突)。请注意,您当前发布的与旧版小部件不兼容的博客版本永远不会获得conflict
信息,因此如果您已经没有发布博客,则用户仍会陷入该陷阱。更重要的是,如果最新的博客版本引入了冲突,那么所有具有旧窗口小部件的安装都将永远不会获得该博客版本,但请留在最后一篇未说明该版本冲突的博客版本。
有一些希望摆脱这种混乱。
假设博客版本4.1。*仍然与widget 1.x兼容,现在博客版本4.2.0不兼容。您应该执行以下操作:
conflict
信息添加到composer.json
之后,您可以再次将4.2.0软件分支作为新版本5.0.0发布。< / LI>
如果使用较新的补丁版本引入了不兼容性,则相同的工作流将适用,即博客4.2.6兼容,4.2.7不兼容。发布新的4.2.8并删除更改(即重新发布4.2.6为4.2.8),将conflict
条目添加到4.2.7代码并将其发布为5.0.0。