Unverified Commit 9708e7d1 authored by Jonah Williams's avatar Jonah Williams Committed by GitHub

use package-scheme imports for generated web entrypoint (#45934)

parent 3b2042a0
...@@ -7,6 +7,7 @@ import '../../base/file_system.dart'; ...@@ -7,6 +7,7 @@ import '../../base/file_system.dart';
import '../../base/io.dart'; import '../../base/io.dart';
import '../../base/process_manager.dart'; import '../../base/process_manager.dart';
import '../../build_info.dart'; import '../../build_info.dart';
import '../../compile.dart';
import '../../dart/package_map.dart'; import '../../dart/package_map.dart';
import '../../globals.dart'; import '../../globals.dart';
import '../../project.dart'; import '../../project.dart';
...@@ -51,21 +52,32 @@ class WebEntrypointTarget extends Target { ...@@ -51,21 +52,32 @@ class WebEntrypointTarget extends Target {
final String targetFile = environment.defines[kTargetFile]; final String targetFile = environment.defines[kTargetFile];
final bool shouldInitializePlatform = environment.defines[kInitializePlatform] == 'true'; final bool shouldInitializePlatform = environment.defines[kInitializePlatform] == 'true';
final bool hasPlugins = environment.defines[kHasWebPlugins] == 'true'; final bool hasPlugins = environment.defines[kHasWebPlugins] == 'true';
final String import = fs.file(fs.path.absolute(targetFile)).uri.toString(); final String importPath = fs.path.absolute(targetFile);
final PackageUriMapper packageUriMapper = PackageUriMapper(
importPath,
PackageMap.globalPackagesPath,
null,
null,
);
final Uri mainImport = packageUriMapper.map(importPath);
if (mainImport == null) {
throw Exception('Missing package definition for $mainImport');
}
String contents; String contents;
if (hasPlugins) { if (hasPlugins) {
final String generatedPath = environment.projectDir final String generatedPath = environment.projectDir
.childDirectory('lib') .childDirectory('lib')
.childFile('generated_plugin_registrant.dart') .childFile('generated_plugin_registrant.dart')
.absolute.uri.toString(); .absolute.path;
final Uri generatedImport = packageUriMapper.map(generatedPath);
contents = ''' contents = '''
import 'dart:ui' as ui; import 'dart:ui' as ui;
import 'package:flutter_web_plugins/flutter_web_plugins.dart'; import 'package:flutter_web_plugins/flutter_web_plugins.dart';
import '$generatedPath'; import '$generatedImport';
import "$import" as entrypoint; import '$mainImport' as entrypoint;
Future<void> main() async { Future<void> main() async {
registerPlugins(webPluginRegistry); registerPlugins(webPluginRegistry);
...@@ -79,7 +91,7 @@ Future<void> main() async { ...@@ -79,7 +91,7 @@ Future<void> main() async {
contents = ''' contents = '''
import 'dart:ui' as ui; import 'dart:ui' as ui;
import "$import" as entrypoint; import '$mainImport' as entrypoint;
Future<void> main() async { Future<void> main() async {
if ($shouldInitializePlatform) { if ($shouldInitializePlatform) {
......
...@@ -9,6 +9,7 @@ import 'package:flutter_tools/src/build_system/build_system.dart'; ...@@ -9,6 +9,7 @@ import 'package:flutter_tools/src/build_system/build_system.dart';
import 'package:flutter_tools/src/build_system/depfile.dart'; import 'package:flutter_tools/src/build_system/depfile.dart';
import 'package:flutter_tools/src/build_system/targets/dart.dart'; import 'package:flutter_tools/src/build_system/targets/dart.dart';
import 'package:flutter_tools/src/build_system/targets/web.dart'; import 'package:flutter_tools/src/build_system/targets/web.dart';
import 'package:flutter_tools/src/dart/package_map.dart';
import 'package:mockito/mockito.dart'; import 'package:mockito/mockito.dart';
import 'package:process/process.dart'; import 'package:process/process.dart';
...@@ -35,12 +36,17 @@ void main() { ...@@ -35,12 +36,17 @@ void main() {
when(mockWindowsPlatform.isLinux).thenReturn(false); when(mockWindowsPlatform.isLinux).thenReturn(false);
testbed = Testbed(setup: () { testbed = Testbed(setup: () {
final File packagesFile = fs.file(fs.path.join('foo', '.packages'))
..createSync(recursive: true)
..writeAsStringSync('foo:lib/\n');
PackageMap.globalPackagesPath = packagesFile.path;
environment = Environment( environment = Environment(
projectDir: fs.currentDirectory, projectDir: fs.currentDirectory.childDirectory('foo'),
outputDir: fs.currentDirectory, outputDir: fs.currentDirectory,
buildDir: fs.currentDirectory, buildDir: fs.currentDirectory,
defines: <String, String>{ defines: <String, String>{
kTargetFile: fs.path.join('lib', 'main.dart'), kTargetFile: fs.path.join('foo', 'lib', 'main.dart'),
} }
); );
environment.buildDir.createSync(recursive: true); environment.buildDir.createSync(recursive: true);
...@@ -57,7 +63,7 @@ void main() { ...@@ -57,7 +63,7 @@ void main() {
final String generated = environment.buildDir.childFile('main.dart').readAsStringSync(); final String generated = environment.buildDir.childFile('main.dart').readAsStringSync();
// Plugins // Plugins
expect(generated, contains("import 'file:///lib/generated_plugin_registrant.dart';")); expect(generated, contains("import 'package:foo/generated_plugin_registrant.dart';"));
expect(generated, contains('registerPlugins(webPluginRegistry);')); expect(generated, contains('registerPlugins(webPluginRegistry);'));
// Platform // Platform
...@@ -67,7 +73,7 @@ void main() { ...@@ -67,7 +73,7 @@ void main() {
expect(generated, contains('entrypoint.main();')); expect(generated, contains('entrypoint.main();'));
// Import. // Import.
expect(generated, contains('import "file:///lib/main.dart" as entrypoint;')); expect(generated, contains("import 'package:foo/main.dart' as entrypoint;"));
})); }));
test('WebEntrypointTarget generates an entrypoint with plugins and init platform on windows', () => testbed.run(() async { test('WebEntrypointTarget generates an entrypoint with plugins and init platform on windows', () => testbed.run(() async {
...@@ -78,7 +84,7 @@ void main() { ...@@ -78,7 +84,7 @@ void main() {
final String generated = environment.buildDir.childFile('main.dart').readAsStringSync(); final String generated = environment.buildDir.childFile('main.dart').readAsStringSync();
// Plugins // Plugins
expect(generated, contains("import 'file:///C:/lib/generated_plugin_registrant.dart';")); expect(generated, contains("import 'package:foo/generated_plugin_registrant.dart';"));
expect(generated, contains('registerPlugins(webPluginRegistry);')); expect(generated, contains('registerPlugins(webPluginRegistry);'));
// Platform // Platform
...@@ -88,7 +94,7 @@ void main() { ...@@ -88,7 +94,7 @@ void main() {
expect(generated, contains('entrypoint.main();')); expect(generated, contains('entrypoint.main();'));
// Import. // Import.
expect(generated, contains('import "file:///C:/lib/main.dart" as entrypoint;')); expect(generated, contains("import 'package:foo/main.dart' as entrypoint;"));
}, overrides: <Type, Generator>{ }, overrides: <Type, Generator>{
Platform: () => mockWindowsPlatform, Platform: () => mockWindowsPlatform,
})); }));
...@@ -101,7 +107,7 @@ void main() { ...@@ -101,7 +107,7 @@ void main() {
final String generated = environment.buildDir.childFile('main.dart').readAsStringSync(); final String generated = environment.buildDir.childFile('main.dart').readAsStringSync();
// Plugins // Plugins
expect(generated, isNot(contains("import 'file:///lib/generated_plugin_registrant.dart';"))); expect(generated, isNot(contains("import 'package:foo/generated_plugin_registrant.dart';")));
expect(generated, isNot(contains('registerPlugins(webPluginRegistry);'))); expect(generated, isNot(contains('registerPlugins(webPluginRegistry);')));
// Platform // Platform
...@@ -119,7 +125,7 @@ void main() { ...@@ -119,7 +125,7 @@ void main() {
final String generated = environment.buildDir.childFile('main.dart').readAsStringSync(); final String generated = environment.buildDir.childFile('main.dart').readAsStringSync();
// Plugins // Plugins
expect(generated, contains("import 'file:///lib/generated_plugin_registrant.dart';")); expect(generated, contains("import 'package:foo/generated_plugin_registrant.dart';"));
expect(generated, contains('registerPlugins(webPluginRegistry);')); expect(generated, contains('registerPlugins(webPluginRegistry);'));
// Platform // Platform
...@@ -137,7 +143,7 @@ void main() { ...@@ -137,7 +143,7 @@ void main() {
final String generated = environment.buildDir.childFile('main.dart').readAsStringSync(); final String generated = environment.buildDir.childFile('main.dart').readAsStringSync();
// Plugins // Plugins
expect(generated, isNot(contains("import 'file:///lib/generated_plugin_registrant.dart';"))); expect(generated, isNot(contains("import 'package:foo/generated_plugin_registrant.dart';")));
expect(generated, isNot(contains('registerPlugins(webPluginRegistry);'))); expect(generated, isNot(contains('registerPlugins(webPluginRegistry);')));
// Platform // Platform
...@@ -162,7 +168,7 @@ void main() { ...@@ -162,7 +168,7 @@ void main() {
'--no-minify', // but uses unminified names for debugging '--no-minify', // but uses unminified names for debugging
'-o', '-o',
environment.buildDir.childFile('main.dart.js').absolute.path, environment.buildDir.childFile('main.dart.js').absolute.path,
'--packages=.packages', '--packages=${fs.path.join('foo', '.packages')}',
'-Ddart.vm.profile=true', '-Ddart.vm.profile=true',
environment.buildDir.childFile('main.dart').absolute.path, environment.buildDir.childFile('main.dart').absolute.path,
]; ];
...@@ -185,7 +191,7 @@ void main() { ...@@ -185,7 +191,7 @@ void main() {
'-O4', // highest optimizations. '-O4', // highest optimizations.
'-o', '-o',
environment.buildDir.childFile('main.dart.js').absolute.path, environment.buildDir.childFile('main.dart.js').absolute.path,
'--packages=.packages', '--packages=${fs.path.join('foo', '.packages')}',
'-Ddart.vm.product=true', '-Ddart.vm.product=true',
environment.buildDir.childFile('main.dart').absolute.path, environment.buildDir.childFile('main.dart').absolute.path,
]; ];
...@@ -209,7 +215,7 @@ void main() { ...@@ -209,7 +215,7 @@ void main() {
'-O3', // configured optimizations. '-O3', // configured optimizations.
'-o', '-o',
environment.buildDir.childFile('main.dart.js').absolute.path, environment.buildDir.childFile('main.dart.js').absolute.path,
'--packages=.packages', '--packages=${fs.path.join('foo', '.packages')}',
'-Ddart.vm.product=true', '-Ddart.vm.product=true',
environment.buildDir.childFile('main.dart').absolute.path, environment.buildDir.childFile('main.dart').absolute.path,
]; ];
...@@ -252,7 +258,7 @@ void main() { ...@@ -252,7 +258,7 @@ void main() {
'-O4', '-O4',
'-o', '-o',
environment.buildDir.childFile('main.dart.js').absolute.path, environment.buildDir.childFile('main.dart.js').absolute.path,
'--packages=.packages', '--packages=${fs.path.join('foo', '.packages')}',
'-Ddart.vm.product=true', '-Ddart.vm.product=true',
'-DFOO=bar', '-DFOO=bar',
'-DBAZ=qux', '-DBAZ=qux',
...@@ -279,7 +285,7 @@ void main() { ...@@ -279,7 +285,7 @@ void main() {
'--no-minify', '--no-minify',
'-o', '-o',
environment.buildDir.childFile('main.dart.js').absolute.path, environment.buildDir.childFile('main.dart.js').absolute.path,
'--packages=.packages', '--packages=${fs.path.join('foo', '.packages')}',
'-Ddart.vm.profile=true', '-Ddart.vm.profile=true',
'-DFOO=bar', '-DFOO=bar',
'-DBAZ=qux', '-DBAZ=qux',
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment