diff --git a/sdk/lib/_internal/pub/lib/src/barback/transformer_cache.dart b/sdk/lib/_internal/pub/lib/src/barback/transformer_cache.dart
index 5433ce1..e6c9a53 100644
--- a/sdk/lib/_internal/pub/lib/src/barback/transformer_cache.dart
+++ b/sdk/lib/_internal/pub/lib/src/barback/transformer_cache.dart
@@ -56,6 +56,10 @@
   /// Clear the cache if it depends on any package in [changedPackages].
   void clearIfOutdated(Set<String> changedPackages) {
     var snapshotDependencies = unionAll(_oldTransformers.map((id) {
+      // If the transformer cache contains transformers we don't know about,
+      // that's fine; we just won't load them.
+      if (!_graph.packages.containsKey(id.package)) return new Set();
+
       return _graph.transitiveDependencies(id.package)
           .map((package) => package.name).toSet();
     }));
diff --git a/sdk/lib/_internal/pub/test/transformer/cache_test.dart b/sdk/lib/_internal/pub/test/transformer/cache_test.dart
index 270d307..d4a51a0 100644
--- a/sdk/lib/_internal/pub/test/transformer/cache_test.dart
+++ b/sdk/lib/_internal/pub/test/transformer/cache_test.dart
@@ -4,6 +4,7 @@
 
 library pub_tests;
 
+import 'package:scheduled_test/scheduled_stream.dart';
 import 'package:scheduled_test/scheduled_test.dart';
 
 import '../descriptor.dart' as d;
@@ -53,6 +54,8 @@
         d.file("transformer.dart", replaceTransformer("Goodbye", "See ya"))
       ])
     ]);
+
+    builder.serve("baz", "1.2.3");
   });
 
   d.dir(appPath, [
@@ -266,6 +269,60 @@
     process.stdout.expect("See ya!");
     process.shouldExit();
   });
+
+  // Issue 21298.
+  integration("doesn't recache when a transformer is removed", () {
+    setUp();
+
+    d.dir(appPath, [
+      d.pubspec({
+        "name": "myapp",
+        "dependencies": {
+          "foo": "1.2.3",
+          "bar": "1.2.3"
+        },
+        "transformers": ["foo", "bar"]
+      }),
+      d.dir("bin", [
+        d.file("myapp.dart", "main() => print('Hello!');")
+      ])
+    ]).create();
+
+    var process = pubRun(args: ['myapp']);
+    process.stdout.expect("See ya!");
+    process.shouldExit();
+
+    d.dir(appPath, [
+      d.pubspec({
+        "name": "myapp",
+        "dependencies": {
+          "foo": "1.2.3",
+          // Add a new dependency to trigger another "pub get". This works
+          // around issue 20498.
+          "baz": "1.2.3"
+        },
+        "transformers": ["foo"]
+      }),
+      d.dir("bin", [
+        d.file("myapp.dart", "main() => print('Hello!');")
+      ])
+    ]).create();
+
+    process = pubRun(args: ['myapp']);
+    process.stdout.expect(
+        "Your pubspec has changed, so we need to update your lockfile:");
+    process.stdout.expect(consumeThrough("Goodbye!"));
+    process.shouldExit();
+
+    // "bar" should still be in the manifest, since there's no reason to
+    // recompile the cache.
+    d.dir(appPath, [
+      d.dir(".pub/transformers", [
+        d.file("manifest.txt", "0.1.2+3\nbar,foo"),
+        d.matcherFile("transformers.snapshot", isNot(isEmpty))
+      ])
+    ]).validate();
+  });
 }
 
 String replaceTransformer(String input, String output) {
diff --git a/sdk/lib/_internal/pub_generated/lib/src/barback/transformer_cache.dart b/sdk/lib/_internal/pub_generated/lib/src/barback/transformer_cache.dart
index 01cf03b..a396d15 100644
--- a/sdk/lib/_internal/pub_generated/lib/src/barback/transformer_cache.dart
+++ b/sdk/lib/_internal/pub_generated/lib/src/barback/transformer_cache.dart
@@ -19,6 +19,7 @@
   }
   void clearIfOutdated(Set<String> changedPackages) {
     var snapshotDependencies = unionAll(_oldTransformers.map((id) {
+      if (!_graph.packages.containsKey(id.package)) return new Set();
       return _graph.transitiveDependencies(
           id.package).map((package) => package.name).toSet();
     }));
diff --git a/sdk/lib/_internal/pub_generated/test/transformer/cache_test.dart b/sdk/lib/_internal/pub_generated/test/transformer/cache_test.dart
index 80a5278..b5ea7cb 100644
--- a/sdk/lib/_internal/pub_generated/test/transformer/cache_test.dart
+++ b/sdk/lib/_internal/pub_generated/test/transformer/cache_test.dart
@@ -1,4 +1,5 @@
 library pub_tests;
+import 'package:scheduled_test/scheduled_stream.dart';
 import 'package:scheduled_test/scheduled_test.dart';
 import '../descriptor.dart' as d;
 import '../test_pub.dart';
@@ -40,6 +41,7 @@
             d.dir(
                 "lib",
                 [d.file("transformer.dart", replaceTransformer("Goodbye", "See ya"))])]);
+    builder.serve("baz", "1.2.3");
   });
   d.dir(appPath, [d.pubspec({
       "name": "myapp",
@@ -215,6 +217,43 @@
     process.stdout.expect("See ya!");
     process.shouldExit();
   });
+  integration("doesn't recache when a transformer is removed", () {
+    setUp();
+    d.dir(appPath, [d.pubspec({
+        "name": "myapp",
+        "dependencies": {
+          "foo": "1.2.3",
+          "bar": "1.2.3"
+        },
+        "transformers": ["foo", "bar"]
+      }),
+          d.dir("bin", [d.file("myapp.dart", "main() => print('Hello!');")])]).create();
+    var process = pubRun(args: ['myapp']);
+    process.stdout.expect("See ya!");
+    process.shouldExit();
+    d.dir(appPath, [d.pubspec({
+        "name": "myapp",
+        "dependencies": {
+          "foo": "1.2.3",
+          "baz": "1.2.3"
+        },
+        "transformers": ["foo"]
+      }),
+          d.dir("bin", [d.file("myapp.dart", "main() => print('Hello!');")])]).create();
+    process = pubRun(args: ['myapp']);
+    process.stdout.expect(
+        "Your pubspec has changed, so we need to update your lockfile:");
+    process.stdout.expect(consumeThrough("Goodbye!"));
+    process.shouldExit();
+    d.dir(
+        appPath,
+        [
+            d.dir(
+                ".pub/transformers",
+                [
+                    d.file("manifest.txt", "0.1.2+3\nbar,foo"),
+                    d.matcherFile("transformers.snapshot", isNot(isEmpty))])]).validate();
+  });
 }
 String replaceTransformer(String input, String output) {
   return """
diff --git a/tools/VERSION b/tools/VERSION
index 2c3be21..7176a50 100644
--- a/tools/VERSION
+++ b/tools/VERSION
@@ -26,6 +26,6 @@
 CHANNEL stable
 MAJOR 1
 MINOR 7
-PATCH 1
+PATCH 2
 PRERELEASE 0
 PRERELEASE_PATCH 0
