prinsfrank/composer-version-lock

此软件包已被弃用且不再维护。作者建议使用 composer 软件包。

由 composer 自身提供功能;将 composer 锁定到特定版本的项目中

安装数: 14,042

依赖项: 0

建议者: 0

安全: 0

星标: 10

关注者: 1

分支: 2

公开问题: 0

类型:composer-plugin

v1.7 2022-04-12 09:26 UTC

This package is auto-updated.

Last update: 2022-07-05 18:42:47 UTC


README

警告

由于此软件包提供的功能现在已完全由 composer 本身提供(感谢 @szepeviktor!),因此此软件包现已弃用。要迁移,请执行以下命令。

如文档中所述,添加对插件 api 的要求是个好主意,因为在 2.2.0 版本之前,无法提供确切的 composer 版本。

composer require "composer-plugin-api:>=2.2.0"

现在您可以添加对实际 composer 版本的要求

composer require "composer:^2.3.9"

最后,您可以删除此软件包!

composer remove prinsfrank/composer-version-lock

执行此命令后,"composer-version" 和 "composer-suggest" 键应自动从您的 composer.json 中的 "extra" 部分删除。如果没有其他键,则应删除整个部分。如果不是这样,请手动删除这些键。

Composer 版本锁定

Code Coverage Release License Open Issues

为什么需要这个插件?

当与同一代码库中的许多人一起工作时,解决 Composer 锁定文件的合并冲突有时相当麻烦。

即使分支之间唯一的更改是添加了两个不同的软件包,对 composer.lock 文件的 diff 也可能长达数百行。当唯一预期的更改是哈希值和软件包的信息(以及可能的一些更改的依赖项版本)时,开发人员之间的 composer 版本差异通常是罪魁祸首。有时这些差异很大,比如 支持资金部分,其他时候只是某些键的顺序从 composer 版本更改为下一个。

此插件使得在 composer.json 文件中共享所需的 composer 版本成为可能。

更多详情请查看我的个人博客上的文章

开始使用

要包含此软件包,只需运行;

composer require prinsfrank/composer-version-lock

要为您的项目设置所需的 composer 版本,请运行;

composer config extra.composer-version {VERSION_CONSTRAINT}

任何 Composer 约束 都可以作为 composer/semver 软件包使用,以确定当前 composer 版本是否满足版本约束。

要获取您的当前版本,请运行 composer --version

注意:当未设置 composer 版本时,将显示错误,并提供强制执行您当前 composer 版本的说明。

工作原理

更改锁定文件的命令

一些 composer 命令会更改 composer.lock

  • update
  • remove
  • require

当开发人员使用不满足版本约束的 composer 版本执行上述任何命令时,他们将收到以下错误,并且命令会中止

注意:当版本约束不是精确版本或下一个重要操作符时,无法推断出匹配的版本,因此会显示 composer self-update {version}

不会更改锁文件的命令

当开发者执行任何其他命令而没有可满足的版本时,他们只会收到警告,Composer 会继续运行

使用正确版本时的信息

当开发者使用满足约束的 Composer 版本时,将显示以下消息

选项

建议版本

当使用具有多个有效版本的版本约束时,您可能想建议特定版本。例如,当使用版本约束 1.10.14 || 1.10.15 时,此插件不知道建议哪个版本,因为它们都是有效版本。当您特别想建议 1.10.15 时,您可以通过以下命令使用 composer-suggest 额外键来设置

composer config extra.composer-suggest {VERSION}

当设置了建议版本,但它根据版本约束不正确时,您将收到控制台错误,并且插件将阻止任何进一步的操作,直到您解决此问题。您必须设置正确的建议版本或删除建议版本。

版本更新策略

实施“宽限期”

当您有一个锁定到特定 Composer 版本(例如 2.0.5)的主/主分支,并且有一些最近从主分支分叉出来的功能分支时,您可能会遇到在主分支和功能分支之间切换时需要每次都切换 Composer 版本的问题。

这里的一个好策略是使用以下“宽限期”

  1. 初始版本约束是 2.0.5
  2. 将旧版和新版分别通过两个竖线字符分隔作为新的版本约束: 2.0.5 || 2.0.6
  3. 过了一段时间,旧版和新版的版本约束应该存在于所有分支中。现在您可以要求新版本 2.0.6

当使用命令 composer remove prinsfrank/composer-version-lock 删除插件时,composer.json 中的 extra 部分的 composer-versioncomposer-suggest 设置也会清理。当剩余的额外部分为空时,它也会被删除。

Composer 版本之间锁文件更改的示例

开发

如果您想改进此插件并创建PR,我们非常欢迎!

为了在本地开发时启用自动完成,运行composer u以切换到最新的composer/composer版本,并使用composer u --prefer-lowest以切换到第一个composer/composer版本。

要实际测试该包,运行composer self-update {VERSION}以切换到系统使用的composer版本。

可以使用composer testvendor/bin/phpunit运行测试,并且每当推送或PR到master时,都会自动运行针对每个稳定的composer版本和每个PHP版本的测试。