enable building the bootstrap.js file before the dart.js file (#1639)

diff --git a/lib/src/dartdevc/dartdevc_environment.dart b/lib/src/dartdevc/dartdevc_environment.dart
index 19f30a5..1994b1b 100644
--- a/lib/src/dartdevc/dartdevc_environment.dart
+++ b/lib/src/dartdevc/dartdevc_environment.dart
@@ -266,8 +266,8 @@
 
   // Remove the `.js` extension.
   var dartId = id.changeExtension('');
-  // Conditionally change the `.bootstrap` extension to a `.dart` extension.
-  if (dartId.extension == '.bootstrap') dartId.changeExtension('.dart');
+  // Conditionally remove the `.bootstrap` extension.
+  if (dartId.extension == '.bootstrap') dartId = dartId.changeExtension('');
   assert(dartId.extension == '.dart');
   return dartId;
 }
diff --git a/test/dartdevc/dartdevc_test.dart b/test/dartdevc/dartdevc_test.dart
index 7d9f7a4..b05f5ff 100644
--- a/test/dartdevc/dartdevc_test.dart
+++ b/test/dartdevc/dartdevc_test.dart
@@ -142,38 +142,50 @@
     });
   });
 
-  test("dartdevc resources are copied next to entrypoints", () async {
-    await d.dir(appPath, [
-      d.appPubspec(),
-      d.dir("lib", [
-        d.file("main.dart", 'void main() {}'),
-      ]),
-      d.dir("web", [
-        d.file("main.dart", 'void main() {}'),
-        d.dir("subdir", [
+  group('basic app', () {
+    setUp(() async {
+      await d.dir(appPath, [
+        d.appPubspec(),
+        d.dir("lib", [
           d.file("main.dart", 'void main() {}'),
         ]),
-      ]),
-    ]).create();
+        d.dir("web", [
+          d.file("main.dart", 'void main() {}'),
+          d.dir("subdir", [
+            d.file("main.dart", 'void main() {}'),
+          ]),
+        ]),
+      ]).create();
 
-    await pubGet();
-    await pubServe(args: ['--web-compiler', 'dartdevc']);
-    await requestShouldSucceed('dart_sdk.js', null);
-    await requestShouldSucceed('require.js', null);
-    await requestShouldSucceed('dart_stack_trace_mapper.js', null);
-    await requestShouldSucceed('ddc_web_compiler.js', null);
-    await requestShould404('dart_sdk.js.map');
-    await requestShould404('require.js.map');
-    await requestShould404('dart_stack_trace_mapper.js.map');
-    await requestShould404('ddc_web_compiler.js.map');
-    await requestShouldSucceed('subdir/dart_sdk.js', null);
-    await requestShouldSucceed('subdir/require.js', null);
-    await requestShouldSucceed('subdir/dart_stack_trace_mapper.js', null);
-    await requestShouldSucceed('subdir/ddc_web_compiler.js', null);
-    await requestShould404('subdir/dart_sdk.js.map');
-    await requestShould404('subdir/require.js.map');
-    await requestShould404('subdir/dart_stack_trace_mapper.js.map');
-    await requestShould404('subdir/ddc_web_compiler.js.map');
-    await endPubServe();
+      await pubGet();
+      await pubServe(args: ['--web-compiler', 'dartdevc']);
+    });
+
+    test("dartdevc resources are copied next to entrypoints", () async {
+      await requestShouldSucceed('dart_sdk.js', null);
+      await requestShouldSucceed('require.js', null);
+      await requestShouldSucceed('dart_stack_trace_mapper.js', null);
+      await requestShouldSucceed('ddc_web_compiler.js', null);
+      await requestShould404('dart_sdk.js.map');
+      await requestShould404('require.js.map');
+      await requestShould404('dart_stack_trace_mapper.js.map');
+      await requestShould404('ddc_web_compiler.js.map');
+      await requestShouldSucceed('subdir/dart_sdk.js', null);
+      await requestShouldSucceed('subdir/require.js', null);
+      await requestShouldSucceed('subdir/dart_stack_trace_mapper.js', null);
+      await requestShouldSucceed('subdir/ddc_web_compiler.js', null);
+      await requestShould404('subdir/dart_sdk.js.map');
+      await requestShould404('subdir/require.js.map');
+      await requestShould404('subdir/dart_stack_trace_mapper.js.map');
+      await requestShould404('subdir/ddc_web_compiler.js.map');
+      await endPubServe();
+    });
+
+    // Regression test for https://github.com/dart-lang/pub/issues/1638.
+    test("can request the bootstrap.js file before the dart.js file", () async {
+      await requestShouldSucceed('subdir/main.dart.bootstrap.js', null);
+      await requestShouldSucceed('subdir/main.dart.js', null);
+      await endPubServe();
+    });
   });
 }