in tool/grind.dart [196:288]
Future<String> _buildStorageArtifacts(Directory dir, Sdk sdk,
{required String channel}) async {
final dependenciesFile = _pubDependenciesFile(channel: channel);
final pubspec = createPubspec(
includeFlutterWeb: true,
dartLanguageVersion: readDartLanguageVersion(_channel),
dependencies: parsePubDependenciesFile(dependenciesFile: dependenciesFile),
);
joinFile(dir, ['pubspec.yaml']).writeAsStringSync(pubspec);
await runFlutterPackagesGet(sdk.flutterToolPath, dir.path, log: log);
// locate the artifacts
final flutterPackages = ['flutter', 'flutter_test'];
final flutterLibraries = <String>[];
final packageLines = joinFile(dir, ['.packages']).readAsLinesSync();
for (var line in packageLines) {
line = line.trim();
if (line.startsWith('#') || line.isEmpty) {
continue;
}
final index = line.indexOf(':');
if (index == -1) {
continue;
}
final packageName = line.substring(0, index);
final url = line.substring(index + 1);
if (flutterPackages.contains(packageName)) {
// This is a package we're interested in - add all the public libraries to
// the list.
final libPath = Uri.parse(url).toFilePath();
for (final entity in getDir(libPath).listSync()) {
if (entity is File && entity.path.endsWith('.dart')) {
flutterLibraries.add('package:$packageName/${fileName(entity)}');
}
}
}
}
// Make sure flutter-sdk/bin/cache/flutter_web_sdk/flutter_web_sdk/kernel/flutter_ddc_sdk.dill
// is installed.
await _run(
sdk.flutterToolPath,
arguments: ['precache', '--web'],
workingDirectory: dir.path,
);
// Build the artifacts using DDC:
// dart-sdk/bin/dartdevc -s kernel/flutter_ddc_sdk.dill
// --modules=amd package:flutter/animation.dart ...
final compilerPath = path.join(sdk.dartSdkPath, 'bin', 'dartdevc');
final dillPath = path.join(
sdk.flutterWebSdkPath,
'flutter_ddc_sdk_sound.dill',
);
final args = <String>[
'-s',
dillPath,
'--sound-null-safety',
'--enable-experiment=non-nullable',
'--modules=amd',
'--source-map',
'-o',
'flutter_web.js',
...flutterLibraries
];
await _run(
compilerPath,
arguments: args,
workingDirectory: dir.path,
);
// Copy both to the project directory.
final artifactsDir = getDir(path.join('artifacts'));
artifactsDir.createSync(recursive: true);
final sdkJsPath =
path.join(sdk.flutterWebSdkPath, 'amd-canvaskit-html-sound/dart_sdk.js');
copy(getFile(sdkJsPath), artifactsDir);
copy(getFile('$sdkJsPath.map'), artifactsDir);
copy(joinFile(dir, ['flutter_web.js']), artifactsDir);
copy(joinFile(dir, ['flutter_web.js.map']), artifactsDir);
copy(joinFile(dir, ['flutter_web.dill']), artifactsDir);
// Emit some good Google Storage upload instructions.
final version = sdk.versionFull;
return (' gsutil -h "Cache-Control: public, max-age=604800, immutable" cp -z js ${artifactsDir.path}/*.js*'
' gs://nnbd_artifacts/$version/');
}