Skip to content

Commit 2aef6c5

Browse files
Fix inputs and outputs for WebReleaseBundle (#143023)
Since `WebReleaseBundle` is responsible for copying over the outputs from the subtargets, so it needs to be reflected in inputs and outputs so that things will be recopied when something changes.
1 parent 9fccb32 commit 2aef6c5

2 files changed

Lines changed: 34 additions & 5 deletions

File tree

  • packages/flutter_tools

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

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -132,7 +132,7 @@ abstract class Dart2WebTarget extends Target {
132132

133133
@override
134134
List<Source> get outputs => buildFiles.map(
135-
(String file) => Source.pattern('{OUTPUT_DIR}/$file')
135+
(String file) => Source.pattern('{BUILD_DIR}/$file')
136136
).toList();
137137

138138
@override
@@ -353,9 +353,6 @@ class Dart2WasmTarget extends Dart2WebTarget {
353353
'dart2wasm.d',
354354
];
355355

356-
@override
357-
List<Source> get outputs => const <Source>[];
358-
359356
@override
360357
Map<String, Object?> get buildConfig => <String, Object?>{
361358
'compileTarget': 'dart2wasm',
@@ -401,10 +398,13 @@ class WebReleaseBundle extends Target {
401398
@override
402399
List<Source> get inputs => <Source>[
403400
const Source.pattern('{PROJECT_DIR}/pubspec.yaml'),
401+
...buildFiles.map((String file) => Source.pattern('{BUILD_DIR}/$file'))
404402
];
405403

406404
@override
407-
List<Source> get outputs => <Source>[];
405+
List<Source> get outputs => <Source>[
406+
...buildFiles.map((String file) => Source.pattern('{OUTPUT_DIR}/$file'))
407+
];
408408

409409
@override
410410
List<String> get depfiles => const <String>[

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

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -220,6 +220,35 @@ void main() {
220220
));
221221
}));
222222

223+
test('WebReleaseBundle copies over output files when they change', () => testbed.run(() async {
224+
final Directory webResources = environment.projectDir.childDirectory('web');
225+
webResources.childFile('foo.txt')
226+
..createSync(recursive: true)
227+
..writeAsStringSync('A');
228+
229+
environment.buildDir.childFile('main.dart.wasm')..createSync()..writeAsStringSync('old wasm');
230+
environment.buildDir.childFile('main.dart.mjs')..createSync()..writeAsStringSync('old mjs');
231+
await WebReleaseBundle(<WebCompilerConfig>[
232+
const WasmCompilerConfig()
233+
]).build(environment);
234+
expect(environment.outputDir.childFile('main.dart.wasm')
235+
.readAsStringSync(), 'old wasm');
236+
expect(environment.outputDir.childFile('main.dart.mjs')
237+
.readAsStringSync(), 'old mjs');
238+
239+
environment.buildDir.childFile('main.dart.wasm')..createSync()..writeAsStringSync('new wasm');
240+
environment.buildDir.childFile('main.dart.mjs')..createSync()..writeAsStringSync('new mjs');
241+
242+
await WebReleaseBundle(<WebCompilerConfig>[
243+
const WasmCompilerConfig()
244+
]).build(environment);
245+
246+
expect(environment.outputDir.childFile('main.dart.wasm')
247+
.readAsStringSync(), 'new wasm');
248+
expect(environment.outputDir.childFile('main.dart.mjs')
249+
.readAsStringSync(), 'new mjs');
250+
}));
251+
223252
test('WebEntrypointTarget generates an entrypoint for a file outside of main', () => testbed.run(() async {
224253
final File mainFile = globals.fs.file(globals.fs.path.join('other', 'lib', 'main.dart'))
225254
..createSync(recursive: true)

0 commit comments

Comments
 (0)