Drupal 9 模块 YAML 配置安装失败:依赖项未满足的解决方案

2次阅读

Drupal 9 模块 YAML 配置安装失败:依赖项未满足的解决方案

本文详解 Drupal 9 中因配置文件权限或目录结构不当导致模块安装时提示“unmet dependencies”的典型问题,提供符合核心规范的修复方案,包括正确的 config/install 与 config/optional 目录划分及权限设置建议。

本文详解 drupal 9 中因配置文件权限或目录结构不当导致模块安装时提示“unmet dependencies”的典型问题,提供符合核心规范的修复方案,包括正确的 `config/install` 与 `config/optional` 目录划分及权限设置建议。

在 Drupal 9 中,将导出的配置(如内容类型、视图、媒体类型等)打包为自定义模块进行复用是常见做法。但若直接将所有 .yml 文件一股脑放入模块的 config/install/ 目录下,安装时常会报错:

Unable to install my_module due to unmet dependencies: field.storage.node.field_image, media.type.image, ...

即使你确认相关依赖配置(如 media.type.image.yml)已存在于模块中,该错误仍会发生——根本原因在于 Drupal 配置管理的加载顺序与依赖解析机制:只有明确标记为“可选依赖”的配置,才能在被依赖项尚未存在时被安全跳过;而 config/install/ 下的所有配置均被视为强制安装项,必须满足全部依赖方可执行。

✅ 正确做法是严格遵循 Drupal 核心配置分发规范:

  • ✅ config/install/:仅存放模块自身强依赖的核心配置(如 my_module.settings.yml),且其依赖的实体类型(如 node、user)必须由 Drupal 核心或其他已启用模块提供;
  • ✅ config/optional/:存放可能依赖其他模块的配置,例如:
    • media.type.image.yml(依赖 media 模块)
    • field.storage.media.field_media_image.yml(依赖 media + file 模块)
    • views.view.content.yml(依赖 views 模块)

示例目录结构:

my_module/ ├── my_module.info.yml ├── config/ │   ├── install/ │   │   └── my_module.settings.yml          # 无外部模块依赖 │   └── optional/ │       ├── media.type.image.yml │       ├── field.storage.media.field_media_image.yml │       └── views.view.my_custom_view.yml

⚠️ 注意事项:

  • 不要为 .yml 文件设置 777 权限(原文中“777 解决方案”属临时规避,存在严重安全隐患,且非根本解法)。Drupal 仅读取配置内容,不执行文件,权限应保持为 644(文件)和 755(目录)即可;
  • 确保所有 config/optional/ 中的配置,在其 dependencies.enforced.module 或 dependencies.module 字段中正确声明所依赖的模块(可通过 drush cex 导出后检查);
  • 安装前请清空配置缓存:drush cr,并确保依赖模块(如 media, views)已在 my_module.info.yml 的 dependencies: 列表中声明;
  • 推荐使用 drush en my_module -y 安装,并配合 drush pm:info my_module 验证依赖状态。

总结:Drupal 9 的配置安装失败,90% 源于 install 与 optional 目录误用。回归官方配置分发语义——强制依赖走 install,条件依赖走 optional,辅以正确的模块依赖声明,即可彻底解决 “unmet dependencies” 报错,实现稳定、可复用的模块化配置部署。

text=ZqhQzanResources