如何为已发布包的需求添加上限?

Posted

技术标签:

【中文标题】如何为已发布包的需求添加上限?【英文标题】:How to add an upper bound to a requirement of an already published package? 【发布时间】:2022-01-07 13:58:30 【问题描述】:

考虑到已经向 packagist.org 发布了 php 包的版本(例如 v1.0.0)


    ...
    "require": 
        "php": ">=7.0"
    

是否有一种干净的方法可以以某种方式向后移植上限,这样该版本就不会通过 Composer 安装在 PHP 8+ 上?

因此,如果我进行以下更改并发布 v1.0.1,它将不会安装在 PHP 8+ 上,但 v1.0.0 仍然会安装,因为该要求在该标记下没有上限。

- "php": ">=7.0"
+ "php": "^7.0"

v1.0.x 的问题是它太旧了,永远不会支持新版本的语言。这就是为什么我想只允许在 PHP 7 上安装它。


我看到的唯一选项是 hacky:

以新名称发布新包。 或者从 Packagist 和 git 中删除当前和已发布的标签,添加上限,创建具有相同名称的新标签并发布这些标签。但这会改变历史,当前的消费者会参考一些本来可以存在的东西。

我认为不可能以干净的方式进行,但想提出一个问题,因为还没有。

【问题讨论】:

如果有人成功地使用了 PHP 8 的包怎么办?你真的想阻止这种情况吗?我想说,只需使用 php 要求更改更新包,并在自述文件中添加一些内容,说明该包未在 PHP 8 下测试。我认为您确实尝试做的事情没有解决方案。 是的,我想阻止它。当人们回来报告由于在不受支持的语言版本上使用它引起的错误时,它给维护者增加了负担。人们总是可以选择分叉它并最终自己维护它。 我要做的是快速创建一个新版本的包,仅限制 PHP 7。问题模板中可能不支持记住 PHP 8 的简短警告。我认为你除了处理 v1.0.0 上的错误之外别无他法:/ 【参考方案1】:

如果不重写历史记录,就无法进行此更改。

发布一个“补丁”版本,简单地更改支持的 PHP 版本。任何提交“问题”的人都应该首先更新到您的库的最新版本。

【讨论】:

以上是关于如何为已发布包的需求添加上限?的主要内容,如果未能解决你的问题,请参考以下文章

如何为子域添加单独的谷歌分析

如何为 YouTube 直播添加字幕?

如何为回收站添加上下文菜单

如何为设置包的文本字段提供占位符(Root.plist)

如何为页面上的元素添加填充?

如何为组合框和列表中的选项添加标签?