打开symfony/symfony的包装

打开symfony/symfony的包装,symfony,symfony-2.8,Symfony,Symfony 2.8,我开始在一个用Symfony编写的2.8版的大型项目中工作。将整个项目升级到SF 3需要数百个小时,目前还不可能。我想出了一个主意,将symfony/symfony包解包为它所替代的单个包(在composer.json中输入keyreplace)。它将解锁所有锁定在self.version上的45个软件包,并允许我们在可能的情况下逐步升级任何软件包 示例:我已将条令/orm锁定在2.5.*上,无法升级到2.6(这将消除一些错误,并允许我升级PHP7.2-->7.3)因为我有symfony/con

我开始在一个用Symfony编写的2.8版的大型项目中工作。将整个项目升级到SF 3需要数百个小时,目前还不可能。我想出了一个主意,将
symfony/symfony
包解包为它所替代的单个包(在
composer.json
中输入key
replace
)。它将解锁所有锁定在
self.version
上的45个软件包,并允许我们在可能的情况下逐步升级任何软件包

示例:我已将
条令/orm
锁定在
2.5.*
上,无法升级到
2.6
(这将消除一些错误,并允许我升级PHP
7.2
-->
7.3
)因为我有
symfony/console
symfony/symfony
锁定在版本
2.8
条令/orm:2.6
需要
symfony/console:~3.0.0
。但是,我的项目允许在
^3.2
版本中使用
symfony/console
,因此您可以了解我的观点

我想问您,在尝试解压缩
symfony/symfony
时,应用程序是否存在任何危险?
到目前为止,我看不到任何危险


对于那些想回答“只需要一个更高版本的软件包”的人,请注意。由于Composer 1.7.3,这是不可能的,并且会触发版本冲突

在这种情况下,最好是分步走,仔细检查每一步的结果。当然,如果您的整个项目都包含在测试中,那么做这样的更改会简单得多,但我不知道是否是这样

我可能会这样做:

  • composer.json
    复制到单独的目录中
  • 通过运行
    composer info
  • 查看
    symfony/symfony
    提供的软件包列表,例如查看
    composer.json
    或查看PackageGist上的
  • 将复制的
    composer.json
    中的
    symfony/symfony
    替换为与当前版本相同的单个软件包
  • 运行
    composer install
    并将实际安装的软件包的结果集与为您的项目安装的软件包进行比较。最简单的方法是比较来自两个目录的
    composer info
    的输出。您还可以使用类似于
    composer info | awk-F'{print$1”“$2}| sort
    的方法来获取已排序的包列表及其版本,以便更容易进行比较
  • 调整包列表和版本约束,直到实际项目和新的
    composer.json
    都能从
    composer info
    获得相同的结果
  • composer.json
    复制回主项目。此时,您将能够安装相同的供应商软件包,但能够单独控制它们
  • 继续调整软件包版本,但不要忘记一次应用最小的更改,并分别测试(希望通过运行自动测试)每个更改
  • 我希望您了解
    composer why
    命令,该命令允许您检查包的依赖关系,以便更好地了解哪些包会受到某些特定包版本更改的影响


    祝这项任务顺利,因为仔细升级可能需要相当长的时间。

    我从未有幸与composer一起做过这类事情,但这可能只是因为我缺乏技能。但是Symfony 3删除了Symfony 2的折旧代码。因此,如果你仍然收到通知,那么我怀疑你会遇到很多问题。如果您没有通知,那么升级到3.4应该是直截了当的。是什么让你期望它需要数百个小时?第三方包?