保持 composer.json 更新和维护

Keeping composer.json updated and maintained

这是一个似乎很难找到相关信息的主题。我是否需要更新/面向未来 Symfony 附带的 composer.json 文件,因为 ~approximate 版本离实际的最新版本越来越远?

这只是礼节或喜好问题吗?我希望不会,因为作为开发人员,维护标准已经够难的了。我希望在 composer.json require 中看到一些关于版本读取和指示方式的具体规则。

例如当我的 composer.json 显示

时我该怎么办
"require": {
    "symfony/symfony": "~2.4",
    "doctrine/orm": "~2.2,>=2.2.3",

而是下载 Doctrine 7.4 和 Symfony 4.3?这个可以吗?或者我需要维护我的 composer.json 文件吗?

Composer.lock你说的是这个吗?什么是 composer.lock?这是一个我不需要调整,不想看,也不想编辑的文件。这就是我坚持的结论composer.lock。

与 symfony 兼容?像这样的条目让我有点疯狂,"knplabs/knp-menu-bundle": "2.0.*@dev", @dev?我很想看到它消失了。我怎么知道哪个包是哪个,即我怎么知道我是否需要一个像“2.0.*@dev”这样的名字(which has the version, and a phase tag (dev)), or"dev-master"`(没有版本号,我想我喜欢这个是最好的,但是你会遇到复杂的版本不匹配问题,所以这可能根本不是一个好的标准),那里没有标准。

(请注意,我不需要解释为什么该包仅作为@dev 可用,我意识到它还没有完成。这不是我的意思)。

回到保持 composer.json 文件本身更新,是否真的需要谷歌搜索这些包中的每一个,每隔几个月,查看包要点、npm 和 git hub repo 文档,只是为了找到那个难以捉摸的版本号,猜测它冒着你正在寻找正确的网站,最新代码版本的风险,然后在你验证它之后用那个数字更新你的 composer.json 文件与所有其他包兼容?我的意思是,这不是包管理器应该为我做的吗?

我所见过的有关版本兼容性信息的最佳文档是此处的图表 http://bootstrap.braincrafted.com/getting-started.html#requirements。如果当前所有的主流开源包都可以像这样采用这种兼容性图表的想法,那就太好了,至少如果它们能够被 composer.json 安装,其中确实有一个已实现的版本检查系统。

所以我不应该注意定期 composer.json 以确保它包含正确的版本号吗?我的意思是,它很容易被忽视,但我认为这将是致命的,而不是忽视它是我刚刚创建这个 post 的原因。维护 composer.json 的正确方法是什么?为此可用的资源很少?

无论如何,我在任何地方都找不到默认的 composer.json 文件吗?很高兴看到每个新的 Symfony 版本都有一个,这样我就可以轻松更新 Symfony 至少需要 X 的默认顶部。

其他相关问题

PHP,是的,我完全忽略了 PHP,感谢您指出这一点。这样就说明了兼容版本。请注意,我删除了问题的 PHP 部分并将其修改为使用 Doctrine 和 Symfony 的示例。

就声明 ~2.4 不会在 2.x 上安装任何东西而言,我想这就是你所说的,这是我希望听到的。很高兴知道这一点!

测试套件,我还没有在 Symfony 包中使用过。到目前为止,我一直依赖网络驱动程序。

啊,--prefer-lowest? 这证明了什么,我指定的版本至少相互兼容?

所以关于你的下一点,你在兼容图表注释下方提到,关于它是否属于必需部分的依赖项,如果不是依赖项,则不应放在 required 中,而只需添加文件直接到 app/resources?

你问它有一个默认的 composer.json 文件有什么目的。如果我有一个参考,我会知道在过去两年中慢慢进入我的配置的编辑并没有完全导致我现在正在经历的破损。我只是想看到一些坚实的基础,甚至可能恢复我的文件,删除供应商、网络和作曲家 install/update 看看事情是否再次开始工作,然后一次添加一个包。我现在不能这样做,因为我无法参考我所拥有的与有效的东西。

你是说我可以用 composer init 生成一个新的?我完全忘记了这一点。好点。

您在 composer init 下面提出的关于语义版本控制主要版本增量的另一点。我没有意识到这是一种标准做法,当某些东西不兼容时跳转到下一个数字块。我不知道为什么我过去没有关联它。

你有一个中心的,非常错误的句子:

e.g. what do i do when my composer.json says "require": { "php": ">=5.3.3", "symfony/symfony": "~2.4", but downloads php 7.4 and symfony 4.3 instead? is this ok? Or do i ineed need to maintain my composer.json file?

错误,Composer 不会安装 PHP 的任何版本,但如果使用的版本与声明的版本不兼容,则会发出警告。它不会安装不会 运行 与您安装的 PHP.

版本的软件包

错误的是,当声明“~2.4”时,这意味着不安装 3.0 及更高版本,因此永远不会安装 symfony 4.3。

但是,是的,您需要保持 composer.json。您应该至少定期检查两件事,也许三件:

  1. 您的软件 运行 是否包含最新的允许包?例如。 运行 composer update,然后你的测试套件 - 它应该工作。
  2. 您的软件 运行 是否具有最低要求的版本?例如。 运行 composer update --prefer-lowest,然后你的测试套件 - 它应该可以工作。
  3. 您的软件 运行 是否与包版本的任意组合 - 例如 composer.lock 文件中记录的组合?

如果您发现任何不兼容性,您可能应该尝试排除这些版本。

我也希望看到对分支机构的依赖成为过去。取决于发布的开发版本只是稍微好一点。但只要最常见的安装说明告诉用户 "require dev-master",这不会很快发生。社区仍然需要一些关于为什么使用分支是一件坏事的教育。

我不认为你提到的兼容性图表增加了任何有用的东西。不存在可选依赖项之类的东西。如果需要,它属于 "required" 部分。如果不需要,则没有依赖性。如果另一个包可以与这个包一起使用,并将它们放在一起是主应用程序的任务 - 这是应用程序开发人员管理的任务。

Any why cant i find a default composer.json file anywhere? it would be great to see one for each new symfony release so i can just update the top default symfony requires easily atleast...

这样做的目的是什么?默认 composer.json 可能会由 运行ning composer init 创建并回答问题,即添加名称、描述、许可证、开发人员联系方式和 - 可选 - 一些依赖项。语义版本控制的全部要点是不兼容的更新被清楚地标记为主要版本增量,允许您在更新时不安装它们。如果你说你可以使用 Symfony 版本 2.3,你应该期望 Symfony 版本 2.99 也可以 运行 你的应用程序。

问题是功能蔓延 - 您可能不小心使用了兼容的功能,例如Symfony 2.5,它会在 2.3 中丢失并违反您的最低版本要求。这就是 --prefer-lowest 在您的自动化测试中的作用:您应该调查测试是否失败,如果失败是由于缺少最低版本要求中的功能而导致的,则更新您的版本要求 - 或者修复错误使用 a 的代码如果这是目标,则最低要求版本中不存在的功能。