为什么在 Drupal 8 中卸载时自定义模块中的配置不会自动删除

Why configuration in custom module is not automatically removed on uninstall in Drupal 8

我想了解为什么如果我卸载我的自定义模块并重新安装它,我会收到一条错误消息,指出某些配置已经存在。 这是预期的行为吗?

我正在 hook_uninstall() 中手动删除配置。 这是处理这个问题的正确方法吗?

我已经尝试过其他帖子所说的模块依赖关系,但那样会存在循环依赖关系,并且由于不满足要求而不会安装模块。

我知道我可以使用 optional 而不是 install 但那样配置永远不会被删除。

=== demo_rest_api/config/install/node.type.example_mytype.yml ===

type: example_mytype
name: Example
description: 'Use <em>example</em> content to get to Drupal 8 development better.'
help: ''
new_revision: false
display_submitted: true
preview_mode: 1
status: true
langcode: en



=== demo_rest_api/demo_rest_api.install ===

function demo_rest_api_uninstall(){
    \Drupal::configFactory()->getEditable('node.type.example_mytype')->delete();
}

我希望在模块卸载时默认删除配置。

确保配置在卸载时按预期运行的最简单方法是在首次安装之前将其添加到您的配置文件中:

dependencies:
    - demo_rest_api

这样它会在卸载模块时自行删除。

另一种选择,是将配置文件从config/install移动到config/optional,这样碰撞就不会导致模块安装失败。