如何在全新Drupal 10安装环境中安装带补丁的模块?
Drupal 10下用Composer安装带补丁模块的正确操作方案
一、先解决模块版本兼容性问题
你的错误核心是block_content_permissions现有发布版本仅支持Drupal 8/9,Drupal 10需要安装2.x及以上版本,执行以下命令安装兼容版本:
composer require drupal/block_content_permissions:^2.0
对于其他模块(比如superfish),先确认目标版本是否支持Drupal 10:
- 如果官方稳定版不支持,优先选择标注兼容D10的开发分支(比如
1.x-dev),或确认补丁是用于适配D10的。
二、用Composer补丁插件管理补丁(核心方案)
要让模块受Composer管控且自动应用补丁,必须使用Drupal生态标准的cweagans/composer-patches插件,步骤如下:
- 安装补丁插件
composer require cweagans/composer-patches --dev
- 配置补丁(二选一即可)
方式1:直接在composer.json中配置
在composer.json的extra字段中添加补丁信息,示例:
{ "extra": { "patches": { "drupal/superfish": { "修复Drupal 10兼容问题": "https://www.drupal.org/files/issues/2022-08-01/superfish-%233.patch" } } } }
方式2:用独立补丁文件管理(推荐,便于维护)
创建patches.json文件,写入补丁配置:
{ "drupal/superfish": { "修复Drupal 10兼容问题": "https://www.drupal.org/files/issues/2022-08-01/superfish-%233.patch" } }
然后在composer.json的extra字段中指向该文件:
{ "extra": { "patches-file": "patches.json" } }
- 安装/更新模块并应用补丁
如果模块未安装,执行:
composer require drupal/superfish:~1.4
如果模块已安装,执行:
composer update drupal/superfish --with-all-dependencies
插件会自动下载并应用补丁,且修改会被Composer追踪。
三、纠正之前的错误操作
- 禁止手动放入模块到modules/contrib:手动放置的模块不在Composer管控范围内,会导致版本冲突,先删除手动添加的模块目录,再用Composer重新安装。
- 避免直接git apply修改模块文件:手动修改的文件会被Composer后续的
update命令覆盖,必须通过补丁插件管理修改。 - 不要盲目使用composer install:
install仅同步composer.lock中的内容,新增补丁或模块版本后,需用composer update对应模块。
四、验证补丁状态
执行以下命令查看模块已应用的补丁:
composer show -p drupal/superfish
也可以直接查看模块目录下的文件,确认补丁是否生效。
内容的提问来源于stack exchange,提问作者Lissy
相关产品推荐
相关产品推荐

