Problem with field storage for custom content type modules
The Drupal's config management system which are you using to install configuration isn't really built for this. There are several ways to go about this. The main issue is that the config management system automatically create dependencies and such for you, which is a bit troublesome to manage.

Drupal doesn't have a concept of a shared field, it simple has a field store and field instance, but this isn't owned by a module.

So for solutions, there are some ways to go about this.


Let one module own the field storages you want to want to share and let modules that share fields depend on the module. Note the field can be deleted eventhough it's in a modules install folder, as it's just configuration, unless you lock it. A variation of this would be to combine the modules, into a single module, so all config is install at the same time.
Don't use shared fields - if the modules are independent, it makes sense that they shouldn't share configuration.
Use code to install fields. This is similar to how you define fields for entities, only you need to use FieldConfig and FieldStorageConfig. Drupal have many test cases that does this, which you can use as a guide. Some example code looks like this:

$this-&gt;fieldStorage = FieldStorageConfig::loadByName('entity_test', $field_name);
if (!$this-&gt;fieldStorage) {
  $this-&gt;fieldStorage = FieldStorageConfig::create(array(
    'field_name' =&gt; $field_name,
    'entity_type' =&gt; 'entity_test',
    'type' =&gt; 'link',
  ));
  $this-&gt;fieldStorage-&gt;save();
}

$this-&gt;field = FieldConfig::create([
  'field_storage' =&gt; $this-&gt;fieldStorage,
  'bundle' =&gt; 'entity_test',
  'settings' =&gt; array(
    'title' =&gt; DRUPAL_DISABLED,
    'link_type' =&gt; LinkItemInterface::LINK_GENERIC,
  ),
]);
$this-&gt;field-&gt;save();