首页 > 解决方案 > 解压 symfony/symfony

问题描述

我开始从事一个用 Symfony 编写的 2.8 版本的大型项目。将整个项目升级到 SF 3 需要数百个小时,而且现在还不可能。我想出了一个想法,将包解压缩为它替换的symfony/symfony单个包(键入)。它将解锁所有被锁定的 45 个包,并允许我们在可能的情况下逐步升级任何包。replacecomposer.jsonself.version

示例:我已经doctrine/orm锁定2.5.*并且无法升级到2.6(什么会消除一些错误并允许我升级 PHP 7.2--> 7.3),因为我已经symfony/console锁定symfony/symfony在 version2.8doctrine/orm:2.6requires symfony/console:~3.0.0。但是,我的项目甚至允许symfony/console在版本中使用^3.2,因此您可以看到我的观点。

我想问你在尝试解包时是否对应用程序有任何危险symfony/symfony到目前为止,我什么都看不到。

PS Info 对于那些想要回答“只需要一个更高版本的包”的人。从 Composer 1.7.3 开始,这是不可能的,并且会触发版本冲突。

标签: symfonysymfony-2.8

解决方案


在这种情况下,最好走一小步,仔细检查每一步的结果。当然,如果整个项目都被测试覆盖,那么做这样的改变会简单得多,但我不知道是不是这样。

我可能会做这样的事情:

  1. 复制composer.json到单独的目录
  2. 通过运行获取包的确切版本composer info
  3. 查看提供的软件包列表,symfony/symfony例如通过查看它自己的 composer.json或通过查看在 Packagist 上的页面。
  4. 用与您当前拥有的相同版本的单个包替换symfony/symfony复制的内容。composer.json
  5. 运行composer install并比较实际安装的包的结果集与为您的项目安装的包。最简单的方法是比较composer info两个目录的输出。您还可以使用诸如composer info | awk -F ' ' '{print $1 " " $2}' | sort获取软件包及其版本的排序列表之类的东西,这样比较容易。
  6. 调整包列表和版本约束,直到您从composer info实际项目和新的composer.json.
  7. 复制composer.json回主项目。到这个时候,您将能够安装相同的供应商软件包,但能够单独控制它们。
  8. 继续调整包版本,但不要忘记一次应用最小的更改并单独测试(希望通过运行自动测试)每个更改。

我希望您知道composer why允许您检查包依赖关系的命令,以便您更好地了解哪些包会因更改某些特定包的版本而受到影响。

祝你好运,因为仔细升级可能需要相当长的时间。


推荐阅读