这是新的Drupal9主版本的第一个受支持的版本,Drupal9已经可以在生产站点上使用了!进一步了解Drupal 9和Drupal 8以及drupal9的发行周期。
Drupal9.0.0与Drupal8.9.0同时发布。Drupal8.9是一个长期的支持版本,将支持到2021年11月,没有新的功能开发(而Drupal9的开发和支持将持续到2021年11月)。Drupal8.9拥有Drupal9所做的大部分更改,但保留了通过Drupal8发行版添加的向后兼容层,如果您有一个现有的Drupal站点,那么最好先更新到Drupal8.9,以确保Drupal9更新的最大兼容性和最小的必要更改。
如果您正在启动一个新的Drupal 9项目,那么您可以在Drupal 8.9和9.0之间进行选择,并且通常希望选择drupal9.0来与更高版本进行前向兼容。
不管您现在选择哪个版本,功能都只会添加到Drupal9的小版本中,所以计划今年在Drupal9上,这样您就可以轻松地更新到Drupal9.1和更高版本。
请参阅如何为Drupal9准备Drupal7或8站点,以获取可用于检查模块、主题和站点的Drupal9兼容性的工具。
drupal9.0.0和drupal8.9.0都包含所有最新的提交,并且它们具有相同的api和特性。这也意味着模块和主题可以同时与Drupal8和9兼容!9.0的主要变化是:
已删除不推荐使用的代码。
依赖项已根据需要更新到新的主要版本。
平台需求(支持的PHP和数据库版本)已经增加。
有关所有其他更改,请参阅8.9.x分支。
重要更新信息
从Drupal 8更新
有关从Drupal 8更新到Drupal 9的信息,请参阅将drupal8站点升级到drupal9。
在更新到Drupal9之前,8.7或更早版本的站点必须更新到8.8或8.9,因为Drupal8.8.0-rc1从Drupal9中删除之前的所有Drupal8更新功能。我们建议更新到8.8.7或8.9.0,以及更新所有贡献的模块,然后再更新到任何Drupal9版本。
从Drupal 6和Drupal 7到Drupal 9的迁移路径将在drupal9的整个发布周期中保持支持。
实验工作区模块用户注意事项
在更新到Drupal9之前,使用实验工作区模块的现有Drupal8站点必须至少更新到Drupal8.8.2。(这是由于需要数据完整性修复。)请记住,工作区当前处于beta状态,不打算用于生产。
从Drupal 7升级
Drupal7用户可以继续迁移到Drupal8.8或8.9,或者直接迁移到9.0。多语言站点的升级路径在Drupal9.0.0、8.9.0和8.8.7中是稳定的!
服务器和数据库要求
Drupal 9需要PHP 7.3或更高版本,而Apache的版本需求已经增加到Apache 2.4.7或更高版本。Drupal 9 core支持以下数据库版本:
MySQL或Percona 5.7.8。
MariaDB 10.3.7(请注意,这是一个比MySQL版本更新的版本。)
带有pg_trgm扩展名的PostgreSQL 10。
SQLite 3.26(PHP并不总是使用系统提供的SQLite,因此请验证您的PHP是用至少这个版本编译的)。
MySQL提供的数据库驱动程序可用于支持MySQL、Percona和MariaDB的旧版本,直至其生命周期结束,而类似的PostgreSQL提供的数据库驱动程序可支持PostgreSQL 9.6。(安装驱动程序之前,请务必查看这些驱动程序的项目信息。)
重要更新信息
从Drupal 8更新
有关从Drupal 8更新到Drupal 9的信息,请参阅将drupal8站点升级到drupal9 https://www.drupal.org/docs/9/how-to-prepare-your-drupal-7-or-8-site-for-drupal-9/upgrading-a-drupal-8-site-to-drupal-9。
在更新到Drupal9之前,8.7或更早版本的站点必须更新到8.8或8.9,因为Drupal8.8.0-rc1从Drupal9中删除之前的所有Drupal8更新功能。我们建议更新到8.8.7或8.9.0,以及更新所有贡献的模块,然后再更新到任何Drupal9版本。
从Drupal 6和Drupal 7到Drupal 9的迁移路径将在drupal9的整个发布周期中保持支持。
实验工作区模块用户注意事项
在更新到Drupal9之前,使用实验工作区模块的现有Drupal8站点必须至少更新到Drupal8.8.2。(这是由于需要数据完整性修复。)请记住,工作区当前处于beta状态,不打算用于生产。
从Drupal 7升级
Drupal7用户可以继续迁移到Drupal8.8或8.9,或者直接迁移到9.0。多语言站点的升级路径在Drupal9.0.0、8.9.0和8.8.7中是稳定的!
服务器和数据库要求
Drupal 9需要PHP 7.3或更高版本,而Apache的版本需求已经增加到Apache 2.4.7或更高版本。Drupal 9 core支持以下数据库版本:
MySQL或Percona 5.7.8。
MariaDB 10.3.7(请注意,这是一个比MySQL版本更新的版本。)
带有pg_trgm扩展名的PostgreSQL 10。
SQLite 3.26(PHP并不总是使用系统提供的SQLite,因此请验证您的PHP是用至少这个版本编译的)。
MySQL提供的数据库驱动程序可用于支持MySQL、Percona和MariaDB的旧版本,直至其生命周期结束,而类似的PostgreSQL提供的数据库驱动程序可支持PostgreSQL 9.6。(安装驱动程序之前,请务必查看这些驱动程序的项目信息。)
数据库驱动程序处理改进
当Drupal更新时,默认数据库现在被选中,以确保它符合数据库驱动程序支持的最低版本。(以前,这只发生在安装过程中。)如果不满足要求,更新将不会继续。
如果在运行时看到数据库版本的错误update.php更新,请确保数据库满足最低数据库要求,或安装作为已贡献项目提供的旧数据库驱动程序之一。
模块提供的数据库驱动程序现在可以放在src/Driver/Database中。这些驱动程序将在安装程序中列出。现有的自定义或贡献的驱动程序不需要进行任何更改,将继续像以前一样工作。
Drupal 9核心支持的数据库都支持JSON。Drupal9未来的小版本可能会利用这种JSON支持。鼓励贡献数据库驱动程序的维护人员监视该问题,以查看这将如何影响它们。将为引入这些更改的版本添加更改记录和发布说明。
删除Drupal 8不推荐的api
所有在Drupal8中标记为不推荐使用的代码都已从Drupal9.0.0中删除。许多贡献的模块已经与Drupal-9兼容;但是,在尝试更新到Drupal 9之前,您应该使用最新的Drupal 8.8或Drupal 8.9站点上的升级状态来检查贡献的项目和自定义代码中的问题。
更新系统改进和升级路径修复
当一个站点试图升级到一个新版本而没有首先运行所需的中间数据库更新时,Drupal现在显示了一个更友好的警告。
如果在尝试运行更新时看到“不支持的架构版本”,则应:
备份站点和代码库。
找到已贡献模块的旧版本,其中包含您错过的更新。
将代码库中的模块降级到该版本,然后再次尝试运行更新。
显示此错误时,它现在还将阻止任何更新继续进行,因此可能会使现有站点上的持久性问题更加明显。
理想情况下,您应该始终尝试在站点备份(如本地开发环境)上更新已贡献的模块和核心,然后再在生产环境上运行它们。
如果Drupal 8站点缺少或不兼容的模块、缺少来自core或contrib模块的更新,或者某些类型的数据完整性问题,Drupal 9将停止尝试从Drupal 8进行的更新。在这些情况下,将显示一条明确的错误消息,您应该在再次尝试更新之前修复Drupal8站点上的错误。Drupal8.8和Drupal8.9都修复了几个影响到8.8或更高版本更新的关键升级路径错误。
先前在2846614中作为post updates应用的视图配置修复:视图集成中使用了不正确的字段名,现在在保存的每个视图中应用多值基本字段,以解决升级路径错误。旧的配置结构现在在9.0.0中正式弃用,并将从10.0.0中删除。有关在早期版本中引入此功能的更改的详细信息,请参见相关的更改记录:
视图中的多值基字段不再使用不正确的字段名
Drupal\node\Plugin\views\field\Path已弃用,Drupal\views\Plugin\views\field\EntityLink现在提供此功能
暴露的筛选器现在可以限制它们暴露的运算符
迁移系统改进
从Drupal 6和Drupal 7到Drupal 8或Drupal 9的迁移路径是稳定的,包括多语言迁移和许多迁移到drupal9核心的特性。Drupal9贡献的模块负责向Drupal9提供它们自己的迁移,这是在迁移Drupal6或7站点的过程中需要审计的内容。阅读更多关于从Drupal6或7升级到8及更新版本的内容。
多语言迁移现在是稳定的,并且已经转移到主迁移Drupal模块中。因此,不再需要实验性的多语言Drupal迁移模块,升级时将自动卸载该模块。
新的“完整节点迁移”现在可用,它将迁移所有节点和节点修订,包括已翻译的节点和已翻译的节点修订。完整的节点迁移名为d*\u node_完成.yml(其中*是主要版本,6或7)最终将取代现有的三个节点迁移、d*廑node、d*廑node廑revision和d*廑node廑translation。有关更多信息,请参阅完整节点迁移中的更改记录。
现在支持节点的Drupal 7实体转换修订版迁移。
贡献的项目版本控制改进
贡献的模块现在可以声明与core的多个主要版本的兼容性(因此同一个模块代码库可以同时与Drupal 8和9兼容)。此外,语义版本控制现在也支持贡献的项目,因此Drupal9兼容的模块可能有8.x-3.2或4.0.7这样的模式版本。有关Drupal9中模块版本的更多信息,请查看我们的语义版本控制支持上的更改记录。
针对远程代码执行的呈现数组强化
SA-CORE-2018-002和SA-CORE-2018-004所需的安全修复,以及其他公开披露的安全问题,都表明渲染系统需要对回调调用的内容更加严格。如果您有添加呈现回调(access回调、lazy构建器、pre呈现或post呈现)的代码,则可能需要更新它才能在Drupal 9中工作。请阅读更改记录中的更多内容,了解对呈现数组中的回调调用的限制。
移除的核心模块
实验模块已从堆芯中取出。(自Drupal8.6.0以来,它已经被隐藏起来,没有进一步的开发,在Drupal8.8.0中被正式弃用)。有关更换建议,请参阅放置块上的更改记录。
SimpleTest模块已经移到contrib,Drupal核心不再作为其测试套件的一部分运行SimpleTest。自动化测试应该使用PHPUnit编写和运行。仍然有遗留SimpleTest测试的模块可以自定义核果甘蓝在升级到Drupal9时继续运行SimpleTests。
对核心主题和主题api的更改
为向后兼容的标记和资产添加了一个新的稳定的9基主题。它的模板和CSS文件已经更新,以匹配模块中最新的版本。Drupal8的稳定主题仍然会与Stable9一起在Drupal9中发布,但是在Drupal9生命周期中会被弃用,而在Drupal10中会被删除。
Drupal核心主题,Bartik,Claro,Seven和Umami不再依赖于优雅或稳定。现在,所有这些主题都设置了基本主题:false。这些主题中未重写的所有模板和CSS将直接从core继承。这允许core的内部主题直接从次要版本中的模块更改接收错误修复(而不是开发人员必须将修复复制到每个主题中)。(对于需要在发行版之间保持稳定性的贡献主题或自定义主题,仍然建议扩展Classy或Stable 9。)
后端(PHP)依赖项更改
Symfony公司
Symfony已从Symfony 3.4.32更新到4.4.9。与Drupal一样,Symfony遵循持续升级路径和弃用策略,因此Symfony 4.0具有与3.4相同的API,减去弃用的代码。阅读Symfony的向后兼容性承诺。
symfony/mime和symfony/var转储程序已从5.0.7更新到5.0.8,symfony cmf/routing已从2.1.1更新到2.3.1。
Doctrine packages
树枝已经从1.38.2更新到2.12.5。PHP开发人员和模板创建者所做的更改列在Drupal 9中准备使用Twig 2部分。
编写器依赖项更改
Drupal的作曲家依赖性需求已经从1.9.3更新到1.10.0。
所有后端(编写器)依赖项都已收到最新版本的次要和修补程序级更新。
Drupal提供的Composer插件——scaffold插件、供应商强化插件和项目消息插件——现在与Composer 2兼容,Drupal核心现在允许Composer 1或2。
建议drupal/core不再将composer/installers开发依赖项固定到1.9.0。版本1.9现在是最低要求,只要有新版本可用,并且作曲家管理的站点运行作曲家更新,作曲家/安装程序就可以升级。
此外,Composer已从1.10.0更新到1.10.5,Composer/ca bundle已从1.2.6更新到1.2.7。
wikimedia/composer合并插件依赖项已被删除,因为它与composer 2不兼容。它在Drupal8.8.0中被弃用,并且自那次发行之后就没有在core中使用过。对该项目有单独要求的任何站点都应将其添加为直接依赖项。
Doctrine packages
SimpleAnnotationReader已从条令注释的主分支中删除。因此,它被分岔到Drupal核心以维护相同的功能。贡献的模块不应直接依赖于此库。
大多数条令软件包都收到了对其最新版本的小版本和补丁级别的更新。条令/反省1.2.1已作为依赖项添加,取代了我们对条令/共同的需求。条令/通用及其依赖项(条令/缓存、条令/集合和条令/屈折符)已被删除,因为Drupal core不再使用它们。
层(ZendFramework)依赖关系。
在项目移动之后,ZendFramework/*包已经更新为它们的等效层压板。这些软件包也已经更新到了最新版本,包括从1.8.7到2.3.0的主要版本更新。
自动测试依赖项
Drupal core的测试依赖项已更新为PHPUnit 8.5.3,对早期PHPUnit版本的支持已被删除(因为Drupal9需要PHP 7.3或更高版本)。
基于PhantomJS的测试已被删除。
对后端polyfill的更改
空的paragonie/random_compat PHP 5 polyfill已被删除,不再打包为Drupal 9的依赖项,因为drupal9需要PHP 7.3。
类似地,brumann/polyfill unserialize(将PHP 7序列化功能移植到旧版本)也被删除,因为它不再是必需的。
最后,由于Drupal 9和symfony 4都不支持PHP 7.0,symfony/polyfill-php70已经被删除。
其他值得注意的后端依赖项更改
在可能的情况下,后端生产和开发依赖项已更新为最新的主要、次要或修补程序级别版本。
Guzzle的最低版本从6.3升级到6.5.4。
TYPO3 Phar流包装器已从2.1.2更新到3.1.4。
easyrdf/easyrdf包不再是Drupal的运行时依赖项,也不会包含在标记的版本中。使用EasyRDF的贡献模块或自定义模块需要将依赖项添加到它们的作曲家.json.
Drupal现在为behat/mink(1.8.0)和behat/mink-selenium2-driver(1.4.0)使用稳定版本。因为影响Drupal核心的一个关键错误在任何稳定版本中都没有得到解决,所以这些问题以前被固定在开发版本上。
默认情况下,Drupal 9使用Composer的APCu优化的类加载器。如果您在您的设置.php要在Drupal 8中只使用Composer的类加载器,这不再是必需的,并且可以删除。见https://www.drupal.org/node/3116384更多信息。
Drupal9中不再支持使用基于wincache的类加载器。见https://www.drupal.org/node/3116297更多信息。
前端(CSS和JavaScript)依赖关系更改
jQuery公司
jQuery库已从3.4.1更新到3.5.1,其中包括对SA-CORE-2020-002缓解的安全问题的完全前向兼容修复。在jQuery的发布历史中阅读更多内容。
jQuery更新引入了一些安全修复,这些修复可能会对某些模块、主题或站点造成破坏,这些模块、主题或站点对不支持它们的标记使用了错误的自关闭HTML标记(例如,<div/>,而不是<div></div>)。有关更多信息,请阅读jQuery 3.5更新中的更改记录。
只要支持jQuery 3.x,Drupal 9就将保留对jquery3.x的依赖(因为jQuery 4的稳定版本还不可用)。
jQuery用户界面
大多数jQuery UI组件在Drupal 8.8中被弃用,在Drupal 9.0中被删除。这些库现在作为贡献模块提供,以使依赖于它们的任何模块或主题的更新更容易。有关更多信息,请参阅有关删除这些jQuery UI库的更改记录。
从Drupal 8.8开始仍在使用的库被分岔到Drupal 9核心,以便在drupal9生命周期结束之前更容易修复jQuery UI的任何潜在安全问题。我们计划在Drupal10.0.0发布之前弃用并删除所有这些分叉组件。
有关Drupal9的简单升级路径,请参阅更改记录,以获取有关如何使用提供的已贡献项目的信息,这些项目为依赖于这些已弃用的资产库的任何模块或主题提供替换。
由于jQuery UI本身不再受到主动支持,因此建议您寻找一个长期的替代方案。
浏览器多边形填充
以下浏览器支持polyfill库在8.8.0中已被弃用,并已从Drupal 9.0中删除,因为Drupal core支持的任何浏览器不再需要它们:
html5shiv
匹配媒体
domready(被一个简单的函数所取代,它现在可以在所有支持的浏览器中工作。有关详细信息,请参阅domready is deprecated。)
类列表
对于需要支持旧版浏览器的站点,贡献的html5shiv模块和matchmedia模块为核心库提供了相同的替换。
jQuery Cookie替换为js Cookie
这个jquery.cookie已替换为js cookie版本3.0.0-rc.0。引入了core/js cookie库,并提供了一个向后兼容的填充程序作为核心/jquery.cookie对于Drupal 9。
这还需要删除jQuery Joyride对jQuery Cookie的依赖。如果您的站点或模块手动初始化Joyride,请阅读关于Joyride更改的更改记录。
其他前端依赖项更改
这个规格化.css依赖项已从3.0.3更新到8.0.1。不扩展稳定或类的主题应该手动测试,以防它们需要更新。Drupal8的稳定主题将继续使用规格化.css3.0.3向后兼容。阅读上的更改记录规格化.css升级以获取更多信息。
这个波普尔.js库已更新到版本2.0.6。此迁移指南适用于需要转换其波普尔.js1.x兼容代码到2.x。
Drupal9将继续依赖于CKEditor 4,因为CKEditor的维护者已经同意在2023年底之前与Drupal项目协调ckeditor4的安全修复。
JavaScript开发依赖关系更改
Node.js节点是Drupal核心的开发依赖项。在Drupal9中,DrupalCore的Node.js节点需求已从8.11.0更新到12.0.0。(关于Node.js节点12.)的更新版本Node.js节点可直接安装或与nvm一起安装。这只会影响那些安装了Drupal core的JavaScript开发依赖项和npm或yarn的站点。
与Babel的兼容性问题也得到了解决,Drupal的JavaScript开发工具与Node.js节点最多14个版本。
Stylelint开发依赖项已从12.0.1更新到13.3.3。
Drupal的所有其他JavaScript开发包packages.json包已更新到最新的安全版本。这不会影响生产现场。