Laravel 使用语义版本控制的包版本控制

Package versioning with Semantic Versioning for Laravel

我有一个作曲包 A 和 B。A 用于非 Laravel 项目,而 B 稍微扩展了 A 一些 Laravel 特定文件(配置、外观等)。

  1. B应该如何要求A?是“^1.1”还是“1.*”?由于次要版本不应该破坏任何东西,第二个可能更好,因为我不必经常更新 B 的 composer.json。

  2. 那么B是不是应该匹配Laravel框架的版本(目前是“5.6.x”)?这是好事还是坏事?有些包是这样做的,其他包为不同的框架版本创建单独的分支。

如果两个包都是你的并且是私人的那么你可以将它包含在composer.json

这是一个例子。

  "repositories": [ 
    { 
        "type": "package", 
        "package": 
        { 
            "name": "adnanmayo/laralogs", 
            "version": "0.1.4", 
            "source": { 
                "url": "https://repo.url",
                "type": "git", 
                "reference": "master" 
            }
        } 

    }
], 

您还必须为凭据访问创建一个 auth.json 文件。

{
"http-basic": {
    "bitbucket.org": {
        "username": "username",
        "password": "Passwrod"
    }
}

希望对您有所帮助。

  1. How should B require A? Would it be "^1.1" or "1.*"? As the minor version should not break anything, the second one may be better, as I would not have to update the composer.json of B that often.

这完全是您的政策决定。 AB好像都被你控制了,所以你应该很容易判断是否A 是否真的遵守 Semantic Versioning,以及 BA 中获取每个随机小颠簸的相对风险。

  1. Then, should B match the version of the Laravel framework (currently "5.6.x")? Is that good or bad practice? Some packages do it that way, other create separate branches for the different framework versions.

从来没有!您不负责版本控制 Laravel,您负责版本控制 BB 对 Laravel 的依赖在包定义中定义。您可能有机会至少提高 B 上的补丁级别,而与其依赖性无关。如果您需要明确说明 B 适用于哪个 Laravel 版本,您可以在包名称级别包含它 (B-Laravel.X.Y.Z BX.BY.BZ),构建元数据 (B.X.Y.Z+Laravel.X.Y.Z) 甚至在 publish/feed 级别(单独的网页,REST URI)。

我建议您从 1.y.z 开始,然后遵循 current SemVer spec