【问题标题】:Ensuring laravel stays compatible with php 5.6.x确保 laravel 与 php 5.6.x 保持兼容
【发布时间】:2018-04-11 16:40:27
【问题描述】:

既然Laravel 5.5 只支持PHP > 7.0,我可以做些什么来确保它与5.6.x 保持兼容?我在5.6 环境中,升级PHP 不是一种选择,我想确保composer update 在开发环境中随时运行时不会破坏任何东西。

看文章似乎降级并不容易,所以我只是想确保事情不会以某种方式被破坏。

这里是 composer 入口/依赖列表,laravel 被指定为 5.4.*

{
    "require": {
        "php": ">=5.6.4",
        "laravel/framework": "5.4.*",
        "laravel/tinker": "~1.0",
        "laravelcollective/html": "^5.4.0"
    },
    "require-dev": {
        "fzaninotto/faker": "~1.4",
        "mockery/mockery": "0.9.*",
        "phpunit/phpunit": "~5.7"
    },
}

那么,这是否意味着我不能再运行composer update?或者我仍然可以安全地更新我的其他软件包,例如上面指定的那些,laravel 将保留5.4.36

我意识到 composer 中的规范告诉包保持在5.4.x 范围内,我只是想确保,而且我担心依赖项在保持向后兼容时可能不安全?我想知道我是否应该暂时忘记composer update,或者我是否需要更仔细地调整composer.json

另外请注意,我启动的下一个项目也需要是 PHP 5.6,我将从这里的自定义 laravel-base 进行克隆,它总是有 "laravel/framework": "5.4.*",,所以我会很好只要这样设置?

更新

针对@Eric Brown 的回答,以及对packagist 的一些研究,这就是我将主要依赖项(+laravelcollective/html)调整为:

"require": {
    "php": ">=5.6.4",
    "laravel/framework": "5.4.*",
    "laravel/tinker": "1.0.*",
    "laravelcollective/html": "5.4.*"
},
"require-dev": {
    "fzaninotto/faker": "1.7.*",
    "mockery/mockery": "0.9.*",
    "phpunit/phpunit": "5.7.*"
},

接下来我可能会使用 Laravel/vendor 文件的副本初始化一个新的 git 存储库,然后将其放入一个新目录中,我真的不想弄乱子模块,所以最终可能会成为一个tarball 代替,它可以与原始文件一起提交。

【问题讨论】:

  • PHP 5.6 是no longer actively supported and will receive security updates for only one more year。在那之后,继续运行它将是危险和不负责任的。 现在是开始计划迁移到 PHP 7 的时候了。
  • 好点!这取决于公司。由于我无法控制这方面,我所能做的就是为他们当前的基础设施提供一些长期稳定的东西,然后当他们决定升级时调整 composer.json 将很容易。我会在自述文件或类似的地方大胆地注明您的评论!
  • 确保您的 composer.lock 文件包含在源代码管理中。它包括生成时安装的所有内容的确切 版本,并允许您执行composer install 来安装这些确切版本。 composer update 将使用新软件包更新 .lock 文件,因此将其置于源代码控制中意味着您可以检出旧的 .lock 文件并再次降级回这些确切版本。
  • 谢谢,今天早上我就想到了,这是我要做的第一件事。锁定文件和 composer.json 我将添加到该压缩包中。

标签: laravel composer-php php-7 php-5.6


【解决方案1】:

默认情况下,Laravel 不会像那样升级到较新版本的 Laravel,因为正如您所指出的,在您的 composer.json 文件中,"laravel/framework": "5.4.*" 指定 Laravel 必须始终为 5.4.some_version_number 版本。您不必过多担心向后兼容性,但如果您仍想接收有关潜在错误或漏洞的更新,请添加 * 而非最后一个数字,例如 4.3.* 而不是 4.3.1。

此外,学习如何使用 Git 存储库(例如 Github 或 Bitbucket)并将当前版本存储在其中会非常有益。它们非常适合版本控制,并确保在开发或更新过程中不会出现太可怕的错误。这为我个人节省的次数比我想的要多。

【讨论】:

  • 您是否建议我存储框架本身的“当前版本”,例如Vendor 文件夹,例如将其从 .gitignore 或整个 Laravel 文件夹中删除,放在单独的存储库中并另存为备份?您是否建议我也将星号添加到tinkercollectivefaker
  • 是的,主要是因为在您的实例中,如果更新仅使用 PHP7,升级可能会导致出现问题,这不太可能,但仍有可能。如果更新出错,这只是增加了一层安全性。
猜你喜欢
  • 1970-01-01
  • 2015-07-17
  • 1970-01-01
  • 2018-11-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-02-09
相关资源
最近更新 更多