diff --git a/core/lib/Drupal/Core/Entity/EntityDisplayBase.php b/core/lib/Drupal/Core/Entity/EntityDisplayBase.php
index 2a3945bff8..44d6e3e323 100644
--- a/core/lib/Drupal/Core/Entity/EntityDisplayBase.php
+++ b/core/lib/Drupal/Core/Entity/EntityDisplayBase.php
@@ -4,6 +4,7 @@
 
 use Drupal\Core\Config\Entity\ConfigEntityBase;
 use Drupal\Core\Config\Entity\ConfigEntityInterface;
+use Drupal\Core\Field\BaseFieldDefinition;
 use Drupal\Core\Field\FieldDefinitionInterface;
 use Drupal\Core\Entity\Display\EntityDisplayInterface;
 
@@ -298,13 +299,15 @@ public function calculateDependencies() {
     // If field.module is enabled, add dependencies on 'field_config' entities
     // for both displayed and hidden fields. We intentionally leave out base
     // field overrides, since the field still exists without them.
-    if (\Drupal::moduleHandler()->moduleExists('field')) {
-      $components = $this->content + $this->hidden;
-      $field_definitions = $this->entityManager()->getFieldDefinitions($this->targetEntityType, $this->bundle);
-      foreach (array_intersect_key($field_definitions, $components) as $field_name => $field_definition) {
-        if ($field_definition instanceof ConfigEntityInterface && $field_definition->getEntityTypeId() == 'field_config') {
-          $this->addDependency('config', $field_definition->getConfigDependencyName());
-        }
+    $field_module_installed = \Drupal::moduleHandler()->moduleExists('field');
+    $components = $this->content + $this->hidden;
+    $field_definitions = $this->entityManager()->getFieldDefinitions($this->targetEntityType, $this->bundle);
+    foreach (array_intersect_key($field_definitions, $components) as $field_name => $field_definition) {
+      if ($field_module_installed && $field_definition instanceof ConfigEntityInterface && $field_definition->getEntityTypeId() == 'field_config') {
+        $this->addDependency('config', $field_definition->getConfigDependencyName());
+      }
+      if ($field_definition instanceof BaseFieldDefinition) {
+        $this->addDependency('module', $field_definition->getProvider());
       }
     }
 
@@ -462,6 +465,16 @@ public function onDependencyRemoval(array $dependencies) {
         $changed = TRUE;
       }
     }
+    foreach (\Drupal::service('entity_field.manager')->getBaseFieldDefinitions($this->getTargetEntityTypeId()) as $field_name => $field_definition) {
+      if (in_array($field_definition->getProvider(), $dependencies['module'], TRUE)) {
+        // Remove components for fields whose modules are being uninstalled.
+        // This will take care of any base fields added via
+        // hook_entity_base_field_info().
+        $this->removeComponent($field_name);
+        unset($this->hidden[$field_name]);
+        $changed = TRUE;
+      }
+    }
     foreach ($this->getComponents() as $name => $component) {
       if ($renderer = $this->getRenderer($name)) {
         if (in_array($renderer->getPluginDefinition()['provider'], $dependencies['module'])) {
diff --git a/core/tests/Drupal/KernelTests/Core/Entity/EntityDisplayBaseTest.php b/core/tests/Drupal/KernelTests/Core/Entity/EntityDisplayBaseTest.php
index ec1a55cbbe..7743bf6b43 100644
--- a/core/tests/Drupal/KernelTests/Core/Entity/EntityDisplayBaseTest.php
+++ b/core/tests/Drupal/KernelTests/Core/Entity/EntityDisplayBaseTest.php
@@ -4,6 +4,7 @@
 
 use Drupal\comment\Entity\CommentType;
 use Drupal\Core\Entity\Entity\EntityViewDisplay;
+use Drupal\Core\Field\BaseFieldDefinition;
 use Drupal\field\Entity\FieldConfig;
 use Drupal\field\Entity\FieldStorageConfig;
 use Drupal\KernelTests\KernelTestBase;
@@ -18,7 +19,7 @@ class EntityDisplayBaseTest extends KernelTestBase {
   /**
    * {@inheritdoc}
    */
-  public static $modules = ['entity_test', 'entity_test_third_party', 'field', 'system', 'comment'];
+  public static $modules = ['entity_test', 'entity_test_third_party', 'field', 'system', 'comment', 'entity_test_extra', 'user'];
 
   /**
    * @covers ::preSave
@@ -150,4 +151,38 @@ public function testOnDependencyRemoval() {
     $this->assertSame($expected_dependencies, $entity_display->getDependencies());
   }
 
+  /**
+   * Tests base fields dependency management.
+   *
+   * Base fields should have their provider added to dependencies. They should
+   * be removed when the module providing them is uninstalled.
+   */
+  public function testBaseFields() {
+    // We need the users_data schema to exist to uninstall a module.
+    $this->installSchema('user', ['users_data']);
+
+    $definitions['new_base_field'] = BaseFieldDefinition::create('string')
+      ->setName('new_base_field')
+      ->setLabel(t('A new revisionable base field'))
+      ->setRevisionable(TRUE);
+    $this->container->get('state')->set('entity_test.additional_base_field_definitions', $definitions);
+    $entity_display = EntityViewDisplay::create([
+      'targetEntityType' => 'entity_test',
+      'bundle' => 'entity_test',
+      'mode' => 'default',
+      'status' => TRUE,
+      'content' => [
+        'foo' => ['type' => 'visible'],
+        'new_base_field' => ['type' => 'visible'],
+        'name' => ['type' => 'hidden', 'region' => 'content'],
+      ],
+    ]);
+    $entity_display->save();
+    $this->assertEquals(['module' => ['entity_test', 'entity_test_extra']], $entity_display->getDependencies());
+    $this->container->get('module_installer')->uninstall(['entity_test_extra']);
+    $entity_display = $entity_display::load($entity_display->id());
+    $this->assertEquals(['module' => ['entity_test']], $entity_display->getDependencies());
+    $this->assertEquals(['foo', 'name'], array_keys($entity_display->getComponents()));
+  }
+
 }
