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