I'm building a custom install profile for Drupal 8.4. It uses the new core Media module, and includes custom config files for the entity forms for media's image and file entities. One of those changes depends on the Path module being enabled.
I have both "media" and "path" listed in my install profile's dependencies.
I have the following two custom files:
docroot/profiles/custom/myprofile/core.entity_form_display.media.file.default.yml docroot/profiles/custom/myprofile/core.entity_form_display.media.image.default.yml
And each of these form display files includes "path" among its own module dependencies. When I try to run the installer, I get the following error:
Drupal\Core\Config\UnmetDependenciesException: Configuration objects provided by media have unmet dependencies: core.entity_form_display.media.file.default (path) in Drupal\Core\Config\UnmetDependenciesException::create() (line 98 of /Users/dicksb/Sites/devdesktop/drupal84/docroot/core/lib/Drupal/Core/Config/UnmetDependenciesException.php).
This error does not occur if I remove the two config files.
I believe the problem is simply that "media" is being enabled, and reading these config files, before "path" is enabled, because the media module itself doesn't require path. I reported this as a bug, but didn't really get anywhere; see https://www.drupal.org/project/drupal/issues/2908046.
I get that making media depend on path is not the right solution, but I'm not sure what is.
A workaround
I'm not sure if this is the best, or even a good, way to do this, but it seems to work. I've moved the troublesome configuration files from myprofile/config/install to myprofile/config/post-install. I've then added the following code to a task that runs after installation is complete:
$dir = DRUPAL_ROOT . '/profiles/custom/myprofile/config/post-install';
$files = glob($dir . '/*.yml');
$source = new \Drupal\Core\Config\FileStorage($dir);
$config_storage = \Drupal::service('config.storage');
foreach ($files as $file) {
$components = explode(DIRECTORY_SEPARATOR, $file);
$config_name = str_replace('.yml', '', end($components));
$config_storage->write($config_name, $source->read($config_name));
}