Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
16 changes: 14 additions & 2 deletions packages/flutter_tools/lib/src/commands/build_web.dart
Original file line number Diff line number Diff line change
Expand Up @@ -96,13 +96,22 @@ class BuildWebCommand extends BuildSubCommand {
help:
'Passes "--dump-info" to the Javascript compiler which generates '
'information about the generated code in main.dart.js.info.json.',
hide: !verboseHelp,
);
argParser.addFlag(
'minify',
help:
'Generate minified output. '
'If not explicitly set, uses the compilation mode (debug, profile, release).',
hide: !verboseHelp,
);
argParser.addFlag(
'no-frequency-based-minification',
negatable: false,
help:
'Disables the frequency based minifier. '
'Useful for comparing the output between builds.',
hide: !verboseHelp,
);

//
Expand Down Expand Up @@ -166,6 +175,7 @@ class BuildWebCommand extends BuildSubCommand {
);

final bool sourceMaps = boolArg('source-maps');
final bool minify = boolArg('minify');

final List<WebCompilerConfig> compilerConfigs;

Expand All @@ -187,21 +197,23 @@ class BuildWebCommand extends BuildSubCommand {
),
JsCompilerConfig(
csp: boolArg('csp'),
optimizationLevel: jsOptimizationLevel,
dumpInfo: boolArg('dump-info'),
minify: minify,
nativeNullAssertions: boolArg('native-null-assertions'),
noFrequencyBasedMinification: boolArg('no-frequency-based-minification'),
optimizationLevel: jsOptimizationLevel,
sourceMaps: sourceMaps,
),
];
} else {
compilerConfigs = <WebCompilerConfig>[
JsCompilerConfig(
csp: boolArg('csp'),
optimizationLevel: jsOptimizationLevel,
dumpInfo: boolArg('dump-info'),
minify: minify,
nativeNullAssertions: boolArg('native-null-assertions'),
noFrequencyBasedMinification: boolArg('no-frequency-based-minification'),
optimizationLevel: jsOptimizationLevel,
sourceMaps: sourceMaps,
renderer: webRenderer,
),
Expand Down
9 changes: 8 additions & 1 deletion packages/flutter_tools/lib/src/web/compiler_config.dart
Original file line number Diff line number Diff line change
Expand Up @@ -60,6 +60,7 @@ class JsCompilerConfig extends WebCompilerConfig {
super.optimizationLevel,
this.noFrequencyBasedMinification = false,
super.sourceMaps = true,
this.minify,
super.renderer = WebRendererMode.defaultForJs,
});

Expand All @@ -75,6 +76,11 @@ class JsCompilerConfig extends WebCompilerConfig {
/// If `--dump-info` should be passed to the compiler.
final bool dumpInfo;

/// If minification should be used in the JS compiler.
///
/// If `null`, minifies in release mode only.
final bool? minify;

/// Whether native null assertions are enabled.
final bool nativeNullAssertions;

Expand Down Expand Up @@ -107,7 +113,7 @@ class JsCompilerConfig extends WebCompilerConfig {
///
/// Includes the contents of [toSharedCommandOptions].
List<String> toCommandOptions(BuildMode buildMode) => <String>[
if (buildMode != BuildMode.release) '--no-minify',
if (minify ?? buildMode == BuildMode.release) '--minify' else '--no-minify',
...toSharedCommandOptions(buildMode),
'-O${optimizationLevelForBuildMode(buildMode)}',
if (dumpInfo) '--stage=dump-info-all',
Expand All @@ -123,6 +129,7 @@ class JsCompilerConfig extends WebCompilerConfig {
'dumpInfo': dumpInfo,
'nativeNullAssertions': nativeNullAssertions,
'noFrequencyBasedMinification': noFrequencyBasedMinification,
'minify': minify,
'sourceMaps': sourceMaps,
};
return jsonEncode(settings);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -547,7 +547,11 @@ void main() {

void expectVisible(String option) {
expect(command.argParser.options.keys, contains(option));
expect(command.argParser.options[option]!.hide, isFalse);
expect(
command.argParser.options[option]!.hide,
isFalse,
reason: 'Expecting `$option` to be visible',
);
expect(command.usage, contains(option));
}

Expand All @@ -557,8 +561,6 @@ void main() {
expectVisible('source-maps');
expectVisible('csp');
expectVisible('dart2js-optimization');
expectVisible('dump-info');
expectVisible('no-frequency-based-minification');
expectVisible('wasm');
expectVisible('strip-wasm');
expectVisible('base-href');
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -554,6 +554,47 @@ name: foo
}, overrides: <Type, Generator>{ProcessManager: () => processManager}),
);

test(
'Dart2JSTarget calls dart2js with expected args with minify false',
() => testbed.run(() async {
environment.defines[kBuildMode] = 'release';
processManager.addCommand(
FakeCommand(
command: <String>[
..._kDart2jsLinuxArgs,
'-Ddart.vm.product=true',
'-DFLUTTER_WEB_USE_SKIA=true',
'-DFLUTTER_WEB_USE_SKWASM=false',
'-DFLUTTER_WEB_CANVASKIT_URL=https://www.gstatic.com/flutter-canvaskit/abcdefghijklmnopqrstuvwxyz/',
'-o',
environment.buildDir.childFile('app.dill').absolute.path,
'--packages=/.dart_tool/package_config.json',
'--cfe-only',
environment.buildDir.childFile('main.dart').absolute.path,
],
),
);
processManager.addCommand(
FakeCommand(
command: <String>[
..._kDart2jsLinuxArgs,
'-Ddart.vm.product=true',
'-DFLUTTER_WEB_USE_SKIA=true',
'-DFLUTTER_WEB_USE_SKWASM=false',
'-DFLUTTER_WEB_CANVASKIT_URL=https://www.gstatic.com/flutter-canvaskit/abcdefghijklmnopqrstuvwxyz/',
'--no-minify',
'-O4',
'-o',
environment.buildDir.childFile('main.dart.js').absolute.path,
environment.buildDir.childFile('app.dill').absolute.path,
],
),
);

await Dart2JSTarget(const JsCompilerConfig(minify: false)).build(environment);
}, overrides: <Type, Generator>{ProcessManager: () => processManager}),
);

test(
'Dart2JSTarget ignores frontend server starter path option when calling dart2js',
() => testbed.run(() async {
Expand Down Expand Up @@ -716,6 +757,7 @@ name: foo
'-DFLUTTER_WEB_USE_SKIA=true',
'-DFLUTTER_WEB_USE_SKWASM=false',
'-DFLUTTER_WEB_CANVASKIT_URL=https://www.gstatic.com/flutter-canvaskit/abcdefghijklmnopqrstuvwxyz/',
'--minify',
'--no-source-maps',
'-O4',
'-o',
Expand Down Expand Up @@ -759,6 +801,7 @@ name: foo
'-DFLUTTER_WEB_USE_SKIA=true',
'-DFLUTTER_WEB_USE_SKWASM=false',
'-DFLUTTER_WEB_CANVASKIT_URL=https://www.gstatic.com/flutter-canvaskit/abcdefghijklmnopqrstuvwxyz/',
'--minify',
'--native-null-assertions',
'--no-source-maps',
'-O4',
Expand Down Expand Up @@ -804,6 +847,7 @@ name: foo
'-DFLUTTER_WEB_USE_SKIA=true',
'-DFLUTTER_WEB_USE_SKWASM=false',
'-DFLUTTER_WEB_CANVASKIT_URL=https://www.gstatic.com/flutter-canvaskit/abcdefghijklmnopqrstuvwxyz/',
'--minify',
'--no-source-maps',
'-O3',
'-o',
Expand Down Expand Up @@ -851,6 +895,7 @@ name: foo
'-DFLUTTER_WEB_USE_SKIA=true',
'-DFLUTTER_WEB_USE_SKWASM=false',
'-DFLUTTER_WEB_CANVASKIT_URL=https://www.gstatic.com/flutter-canvaskit/abcdefghijklmnopqrstuvwxyz/',
'--minify',
'--no-source-maps',
'-O4',
'-o',
Expand Down Expand Up @@ -909,6 +954,7 @@ name: foo
'-DFLUTTER_WEB_USE_SKIA=true',
'-DFLUTTER_WEB_USE_SKWASM=false',
'-DFLUTTER_WEB_CANVASKIT_URL=https://www.gstatic.com/flutter-canvaskit/abcdefghijklmnopqrstuvwxyz/',
'--minify',
'--no-source-maps',
'-O4',
'-o',
Expand Down Expand Up @@ -951,6 +997,7 @@ name: foo
'-DFLUTTER_WEB_USE_SKIA=true',
'-DFLUTTER_WEB_USE_SKWASM=false',
'-DFLUTTER_WEB_CANVASKIT_URL=https://www.gstatic.com/flutter-canvaskit/abcdefghijklmnopqrstuvwxyz/',
'--minify',
'-O4',
'-o',
environment.buildDir.childFile('main.dart.js').absolute.path,
Expand Down Expand Up @@ -1251,6 +1298,7 @@ name: foo
JsCompilerConfig(optimizationLevel: 0),
JsCompilerConfig(noFrequencyBasedMinification: true),
JsCompilerConfig(sourceMaps: false),
JsCompilerConfig(minify: false),

// All properties non-default
JsCompilerConfig(
Expand Down