现在Drupal11的正式版已经出来了,Drupal9也已经停止了维护,升级到Drupal10,是必然选择。最近尝试将10多个Drupal9站点,升级到Drupal10,总结一下经验:
1, 先升级到Drupal 9的最后一个版本,也就是Drupal9.5
2, 之后升级到Drupal10.0
3, 再后升级到Drupal10.2
全程做好备份,防止出错。注意模块的兼容性,首先先将模块升级,让它同时兼容Drupal9,Drupal10. 升级主题,也同时兼容Drupal9,Drupal10。自定义模块、主题,info文件修改:
core_version_requirement: ^8 || ^9 || ^10
以下核心模块、主题被移出了内容,ckeditor,Bartik,Seven,Color。对于Color我选择了先卸载。Bartik,Seven选择了升级后,卸载,升级时,需要将对应模块放到主modules,themes目录,不然会提示缺失。对于ckeditor为了保守起见,还是用的旧版本,后续再专门将它迁移到ckeditor5.
此外,Drupal10放弃了对IE11的支持,一些选择性加载的CSS,变成了全局加载,注意兼容性。
升级到Drupal10.2后,CSS,JS的聚合出了问题,这个是因为聚合文件改成了实时生成,用于提升性能。需要修改Nginx的配置文件,参考如下:
location ~ ^/sites/.*/files/(css|js)/ { # For Drupal >=10.1
try_files $uri @rewrite;
}
端口下,没有问题, 子目录下面有问题。我还没有找到子目录安装的配置方法。
一些函数完全废弃,比如drupal_get_path,需要替换,比如改成如下形式。
.\Drupal::service('extension.list.module')->getPath('statistics')
模块的兼容性,特别时版本,一定要对应好,Slick,Blazy的版本一定要对上。一些模块可能没有升级路径,比如IE9模块,我们经过权衡废弃了。
整体来看,Drupal核心的升级相对容易了很多。基本不会出错。但是模块的兼容性,如果你的站点安装模块比较多的话,还是需要逐个的识别的。