Skip to content

Commit 07d7363

Browse files
Consume flutter.js from the engine artifacts. (#137113)
Work in progress... currently testing against presubmit.
1 parent 463c02d commit 07d7363

File tree

7 files changed

+32
-72
lines changed

7 files changed

+32
-72
lines changed

packages/flutter_tools/lib/src/artifacts.dart

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -81,6 +81,9 @@ enum HostArtifact {
8181
/// The libraries JSON file for web release builds.
8282
flutterWebLibrariesJson,
8383

84+
// The flutter.js bootstrapping file provided by the engine.
85+
flutterJsDirectory,
86+
8487
/// Folder that contains platform dill files for the web sdk.
8588
webPlatformKernelFolder,
8689

@@ -232,6 +235,8 @@ String _hostArtifactToFileName(HostArtifact artifact, Platform platform) {
232235
switch (artifact) {
233236
case HostArtifact.flutterWebSdk:
234237
return '';
238+
case HostArtifact.flutterJsDirectory:
239+
return 'flutter_js';
235240
case HostArtifact.iosDeploy:
236241
return 'ios-deploy';
237242
case HostArtifact.idevicesyslog:
@@ -440,6 +445,9 @@ class CachedArtifacts implements Artifacts {
440445
case HostArtifact.flutterWebLibrariesJson:
441446
final String path = _fileSystem.path.join(_getFlutterWebSdkPath(), _hostArtifactToFileName(artifact, _platform));
442447
return _fileSystem.file(path);
448+
case HostArtifact.flutterJsDirectory:
449+
final String path = _fileSystem.path.join(_getFlutterWebSdkPath(), 'flutter_js');
450+
return _fileSystem.directory(path);
443451
case HostArtifact.webPlatformKernelFolder:
444452
final String path = _fileSystem.path.join(_getFlutterWebSdkPath(), 'kernel');
445453
return _fileSystem.file(path);
@@ -893,6 +901,9 @@ class CachedLocalEngineArtifacts implements Artifacts {
893901
case HostArtifact.flutterWebLibrariesJson:
894902
final String path = _fileSystem.path.join(_getFlutterWebSdkPath(), _hostArtifactToFileName(artifact, _platform));
895903
return _fileSystem.file(path);
904+
case HostArtifact.flutterJsDirectory:
905+
final String path = _fileSystem.path.join(_getFlutterWebSdkPath(), 'flutter_js');
906+
return _fileSystem.directory(path);
896907
case HostArtifact.webPlatformKernelFolder:
897908
final String path = _fileSystem.path.join(_getFlutterWebSdkPath(), 'kernel');
898909
return _fileSystem.file(path);
@@ -1205,6 +1216,9 @@ class CachedLocalWebSdkArtifacts implements Artifacts {
12051216
case HostArtifact.flutterWebLibrariesJson:
12061217
final String path = _fileSystem.path.join(_getFlutterWebSdkPath(), _hostArtifactToFileName(artifact, _platform));
12071218
return _fileSystem.file(path);
1219+
case HostArtifact.flutterJsDirectory:
1220+
final String path = _fileSystem.path.join(_getFlutterWebSdkPath(), 'flutter_js');
1221+
return _fileSystem.directory(path);
12081222
case HostArtifact.webPlatformKernelFolder:
12091223
final String path = _fileSystem.path.join(_getFlutterWebSdkPath(), 'kernel');
12101224
return _fileSystem.file(path);

packages/flutter_tools/lib/src/build_system/targets/web.dart

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,6 @@ import '../../globals.dart' as globals;
2020
import '../../html_utils.dart';
2121
import '../../project.dart';
2222
import '../../web/compile.dart';
23-
import '../../web/file_generators/flutter_js.dart' as flutter_js;
2423
import '../../web/file_generators/flutter_service_worker_js.dart';
2524
import '../../web/file_generators/main_dart.dart' as main_dart;
2625
import '../../web/file_generators/wasm_bootstrap.dart' as wasm_bootstrap;
@@ -525,11 +524,12 @@ class WebBuiltInAssets extends Target {
525524
}
526525

527526
// Write the flutter.js file
528-
final File flutterJsFile = environment.outputDir.childFile('flutter.js');
529-
final String fileGeneratorsPath =
530-
environment.artifacts.getArtifactPath(Artifact.flutterToolsFileGenerators);
531-
flutterJsFile.writeAsStringSync(
532-
flutter_js.generateFlutterJsFile(fileGeneratorsPath));
527+
final String flutterJsOut = fileSystem.path.join(environment.outputDir.path, 'flutter.js');
528+
final File flutterJsFile = fileSystem.file(fileSystem.path.join(
529+
globals.artifacts!.getHostArtifact(HostArtifact.flutterJsDirectory).path,
530+
'flutter.js',
531+
));
532+
flutterJsFile.copySync(flutterJsOut);
533533
}
534534
}
535535

packages/flutter_tools/lib/src/isolated/devfs_web.dart

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,6 @@ import '../vmservice.dart';
4040
import '../web/bootstrap.dart';
4141
import '../web/chrome.dart';
4242
import '../web/compile.dart';
43-
import '../web/file_generators/flutter_js.dart' as flutter_js;
4443
import '../web/memory_fs.dart';
4544

4645
typedef DwdsLauncher = Future<Dwds> Function({
@@ -834,14 +833,11 @@ class WebDevFS implements DevFS {
834833
final String entrypoint = globals.fs.path.basename(mainFile.path);
835834
webAssetServer.writeBytes(entrypoint, mainFile.readAsBytesSync());
836835
webAssetServer.writeBytes('require.js', requireJS.readAsBytesSync());
836+
webAssetServer.writeBytes('flutter.js', flutterJs.readAsBytesSync());
837837
webAssetServer.writeBytes(
838838
'stack_trace_mapper.js', stackTraceMapper.readAsBytesSync());
839839
webAssetServer.writeFile(
840840
'manifest.json', '{"info":"manifest not generated in run mode."}');
841-
final String fileGeneratorsPath = globals.artifacts!
842-
.getArtifactPath(Artifact.flutterToolsFileGenerators);
843-
webAssetServer.writeFile(
844-
'flutter.js', flutter_js.generateFlutterJsFile(fileGeneratorsPath));
845841
webAssetServer.writeFile('flutter_service_worker.js',
846842
'// Service worker not loaded in run mode.');
847843
webAssetServer.writeFile(
@@ -934,6 +930,12 @@ class WebDevFS implements DevFS {
934930
'require.js',
935931
));
936932

933+
@visibleForTesting
934+
final File flutterJs = globals.fs.file(globals.fs.path.join(
935+
globals.artifacts!.getHostArtifact(HostArtifact.flutterJsDirectory).path,
936+
'flutter.js',
937+
));
938+
937939
@visibleForTesting
938940
final File stackTraceMapper = globals.fs.file(globals.fs.path.join(
939941
globals.artifacts!.getArtifactPath(Artifact.engineDartSdkPath, platform: TargetPlatform.web_javascript),

packages/flutter_tools/lib/src/web/file_generators/flutter_js.dart

Lines changed: 0 additions & 18 deletions
This file was deleted.

packages/flutter_tools/test/general.shard/build_system/targets/web_test.dart

Lines changed: 2 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,6 @@ import 'package:flutter_tools/src/globals.dart' as globals;
1515
import 'package:flutter_tools/src/html_utils.dart';
1616
import 'package:flutter_tools/src/isolated/mustache_template.dart';
1717
import 'package:flutter_tools/src/web/compile.dart';
18-
import 'package:flutter_tools/src/web/file_generators/flutter_js.dart' as flutter_js;
1918
import 'package:flutter_tools/src/web/file_generators/flutter_service_worker_js.dart';
2019

2120
import '../../../src/common.dart';
@@ -70,6 +69,8 @@ void main() {
7069
..writeAsStringSync('foo:foo/lib/\n');
7170
globals.fs.currentDirectory.childDirectory('bar').createSync();
7271
processManager = FakeProcessManager.empty();
72+
globals.fs.file('bin/cache/flutter_web_sdk/flutter_js/flutter.js')
73+
.createSync(recursive: true);
7374

7475
environment = Environment.test(
7576
globals.fs.currentDirectory,
@@ -1056,41 +1057,6 @@ void main() {
10561057
contains('"main.dart.js"'));
10571058
}));
10581059

1059-
test('flutter.js sanity checks', () => testbed.run(() {
1060-
final String fileGeneratorsPath = environment.artifacts
1061-
.getArtifactPath(Artifact.flutterToolsFileGenerators);
1062-
final String flutterJsContents =
1063-
flutter_js.generateFlutterJsFile(fileGeneratorsPath);
1064-
expect(flutterJsContents, contains('"use strict";'));
1065-
expect(flutterJsContents, contains('main.dart.js'));
1066-
expect(flutterJsContents, contains('if (!("serviceWorker" in navigator))'));
1067-
expect(flutterJsContents, contains(r'/\.js$/,'));
1068-
expect(flutterJsContents, contains('flutter_service_worker.js?v='));
1069-
expect(flutterJsContents, contains('document.createElement("script")'));
1070-
expect(flutterJsContents, contains('"application/javascript"'));
1071-
expect(flutterJsContents, contains('const baseUri = '));
1072-
expect(flutterJsContents, contains('document.querySelector("base")'));
1073-
expect(flutterJsContents, contains('.getAttribute("href")'));
1074-
}));
1075-
1076-
test('flutter.js is not dynamically generated', () => testbed.run(() async {
1077-
globals.fs.file('bin/cache/flutter_web_sdk/canvaskit/foo')
1078-
..createSync(recursive: true)
1079-
..writeAsStringSync('OL');
1080-
1081-
await WebBuiltInAssets(globals.fs, WebRendererMode.auto, isWasm: false).build(environment);
1082-
1083-
// No caching of source maps.
1084-
final String fileGeneratorsPath = environment.artifacts
1085-
.getArtifactPath(Artifact.flutterToolsFileGenerators);
1086-
final String flutterJsContents =
1087-
flutter_js.generateFlutterJsFile(fileGeneratorsPath);
1088-
expect(
1089-
environment.outputDir.childFile('flutter.js').readAsStringSync(),
1090-
equals(flutterJsContents),
1091-
);
1092-
}));
1093-
10941060
test('wasm build copies and generates specific files', () => testbed.run(() async {
10951061
globals.fs.file('bin/cache/flutter_web_sdk/canvaskit/canvaskit.wasm')
10961062
.createSync(recursive: true);

packages/flutter_tools/test/general.shard/web/devfs_web_test.dart

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -685,6 +685,7 @@ void main() {
685685
nullSafetyMode: NullSafetyMode.unsound,
686686
);
687687
webDevFS.requireJS.createSync(recursive: true);
688+
webDevFS.flutterJs.createSync(recursive: true);
688689
webDevFS.stackTraceMapper.createSync(recursive: true);
689690

690691
final Uri uri = await webDevFS.create();
@@ -798,6 +799,7 @@ void main() {
798799
nullSafetyMode: NullSafetyMode.sound,
799800
);
800801
webDevFS.requireJS.createSync(recursive: true);
802+
webDevFS.flutterJs.createSync(recursive: true);
801803
webDevFS.stackTraceMapper.createSync(recursive: true);
802804

803805
final Uri uri = await webDevFS.create();

packages/flutter_tools/test/integration.shard/test_data/project.dart

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,6 @@
33
// found in the LICENSE file.
44

55
import 'package:file/file.dart';
6-
import 'package:flutter_tools/src/artifacts.dart';
7-
import 'package:flutter_tools/src/web/file_generators/flutter_js.dart';
86

97
import '../test_utils.dart';
108
import 'deferred_components_config.dart';
@@ -60,13 +58,9 @@ abstract class Project {
6058
}
6159
deferredComponents?.setUpIn(dir);
6260

63-
final String fileGeneratorsPath =
64-
Artifacts.test().getArtifactPath(Artifact.flutterToolsFileGenerators);
65-
final String flutterJsContents = generateFlutterJsFile(fileGeneratorsPath);
66-
6761
// Setup for different flutter web initializations
6862
writeFile(fileSystem.path.join(dir.path, 'web', 'index.html'), indexHtml);
69-
writeFile(fileSystem.path.join(dir.path, 'web', 'flutter.js'), flutterJsContents);
63+
writeFile(fileSystem.path.join(dir.path, 'web', 'flutter.js'), '');
7064
writeFile(fileSystem.path.join(dir.path, 'web', 'flutter_service_worker.js'), '');
7165
writePackages(dir.path);
7266
await getPackages(dir.path);

0 commit comments

Comments
 (0)