diff --git a/blocks/all.js b/blocks/all.js
new file mode 100644
index 000000000..17000f8c9
--- /dev/null
+++ b/blocks/all.js
@@ -0,0 +1,23 @@
+/**
+ * @license
+ * Copyright 2021 Google LLC
+ * SPDX-License-Identifier: Apache-2.0
+ */
+
+/**
+ * @fileoverview All the blocks. (Entry point for blocks_compressed.js.)
+ * @suppress {extraRequire}
+ */
+'use strict';
+
+goog.module('Blockly.blocks.all');
+
+goog.require('Blockly.blocks.colour');
+goog.require('Blockly.blocks.lists');
+goog.require('Blockly.blocks.logic');
+goog.require('Blockly.blocks.loops');
+goog.require('Blockly.blocks.math');
+goog.require('Blockly.blocks.procedures');
+goog.require('Blockly.blocks.texts');
+goog.require('Blockly.blocks.variables');
+goog.require('Blockly.blocks.variablesDynamic');
diff --git a/generators/dart/all.js b/generators/dart/all.js
new file mode 100644
index 000000000..f250f7c27
--- /dev/null
+++ b/generators/dart/all.js
@@ -0,0 +1,25 @@
+/**
+ * @license
+ * Copyright 2021 Google LLC
+ * SPDX-License-Identifier: Apache-2.0
+ */
+
+/**
+ * @fileoverview Complete helper functions for generating Dart for
+ * blocks. This is the entrypoint for dart_compressed.js.
+ * @suppress {extraRequire}
+ */
+'use strict';
+
+goog.module('Blockly.Dart.all');
+
+goog.require('Blockly.Dart.colour');
+goog.require('Blockly.Dart.lists');
+goog.require('Blockly.Dart.logic');
+goog.require('Blockly.Dart.loops');
+goog.require('Blockly.Dart.math');
+goog.require('Blockly.Dart.procedures');
+goog.require('Blockly.Dart.texts');
+goog.require('Blockly.Dart.variables');
+goog.require('Blockly.Dart.variablesDynamic');
+
diff --git a/generators/javascript/all.js b/generators/javascript/all.js
new file mode 100644
index 000000000..05eca0040
--- /dev/null
+++ b/generators/javascript/all.js
@@ -0,0 +1,25 @@
+/**
+ * @license
+ * Copyright 2021 Google LLC
+ * SPDX-License-Identifier: Apache-2.0
+ */
+
+/**
+ * @fileoverview Complete helper functions for generating JavaScript for
+ * blocks. This is the entrypoint for javascript_compressed.js.
+ * @suppress {extraRequire}
+ */
+'use strict';
+
+goog.module('Blockly.JavaScript.all');
+
+goog.require('Blockly.JavaScript.colour');
+goog.require('Blockly.JavaScript.lists');
+goog.require('Blockly.JavaScript.logic');
+goog.require('Blockly.JavaScript.loops');
+goog.require('Blockly.JavaScript.math');
+goog.require('Blockly.JavaScript.procedures');
+goog.require('Blockly.JavaScript.texts');
+goog.require('Blockly.JavaScript.variables');
+goog.require('Blockly.JavaScript.variablesDynamic');
+
diff --git a/generators/lua/all.js b/generators/lua/all.js
new file mode 100644
index 000000000..af4662de5
--- /dev/null
+++ b/generators/lua/all.js
@@ -0,0 +1,25 @@
+/**
+ * @license
+ * Copyright 2021 Google LLC
+ * SPDX-License-Identifier: Apache-2.0
+ */
+
+/**
+ * @fileoverview Complete helper functions for generating Lua for
+ * blocks. This is the entrypoint for lua_compressed.js.
+ * @suppress {extraRequire}
+ */
+'use strict';
+
+goog.module('Blockly.Lua.all');
+
+goog.require('Blockly.Lua.colour');
+goog.require('Blockly.Lua.lists');
+goog.require('Blockly.Lua.logic');
+goog.require('Blockly.Lua.loops');
+goog.require('Blockly.Lua.math');
+goog.require('Blockly.Lua.procedures');
+goog.require('Blockly.Lua.texts');
+goog.require('Blockly.Lua.variables');
+goog.require('Blockly.Lua.variablesDynamic');
+
diff --git a/generators/php/all.js b/generators/php/all.js
new file mode 100644
index 000000000..7d2c7658a
--- /dev/null
+++ b/generators/php/all.js
@@ -0,0 +1,25 @@
+/**
+ * @license
+ * Copyright 2021 Google LLC
+ * SPDX-License-Identifier: Apache-2.0
+ */
+
+/**
+ * @fileoverview Complete helper functions for generating PHP for
+ * blocks. This is the entrypoint for php_compressed.js.
+ * @suppress {extraRequire}
+ */
+'use strict';
+
+goog.module('Blockly.PHP.all');
+
+goog.require('Blockly.PHP.colour');
+goog.require('Blockly.PHP.lists');
+goog.require('Blockly.PHP.logic');
+goog.require('Blockly.PHP.loops');
+goog.require('Blockly.PHP.math');
+goog.require('Blockly.PHP.procedures');
+goog.require('Blockly.PHP.texts');
+goog.require('Blockly.PHP.variables');
+goog.require('Blockly.PHP.variablesDynamic');
+
diff --git a/generators/python/all.js b/generators/python/all.js
new file mode 100644
index 000000000..0c3bfbb47
--- /dev/null
+++ b/generators/python/all.js
@@ -0,0 +1,25 @@
+/**
+ * @license
+ * Copyright 2021 Google LLC
+ * SPDX-License-Identifier: Apache-2.0
+ */
+
+/**
+ * @fileoverview Complete helper functions for generating Python for
+ * blocks. This is the entrypoint for python_compressed.js.
+ * @suppress {extraRequire}
+ */
+'use strict';
+
+goog.module('Blockly.Python.all');
+
+goog.require('Blockly.Python.colour');
+goog.require('Blockly.Python.lists');
+goog.require('Blockly.Python.logic');
+goog.require('Blockly.Python.loops');
+goog.require('Blockly.Python.math');
+goog.require('Blockly.Python.procedures');
+goog.require('Blockly.Python.texts');
+goog.require('Blockly.Python.variables');
+goog.require('Blockly.Python.variablesDynamic');
+
diff --git a/scripts/gulpfiles/build_tasks.js b/scripts/gulpfiles/build_tasks.js
index 21fc6be51..0bda8da2d 100644
--- a/scripts/gulpfiles/build_tasks.js
+++ b/scripts/gulpfiles/build_tasks.js
@@ -231,7 +231,7 @@ function buildBlocks() {
.pipe(stripApacheLicense())
.pipe(gulp.sourcemaps.init())
.pipe(compile({
- dependency_mode: 'NONE',
+ dependency_mode: 'SORT_ONLY',
externs: ['./externs/goog-externs.js', './externs/block-externs.js'],
js_output_file: 'blocks_compressed.js',
output_wrapper: outputWrapperUMD('Blockly.Blocks', [{
@@ -257,7 +257,7 @@ function buildGenerator(language, namespace) {
.pipe(stripApacheLicense())
.pipe(gulp.sourcemaps.init())
.pipe(compile({
- dependency_mode: 'NONE',
+ dependency_mode: 'SORT_ONLY',
externs: ['./externs/goog-externs.js', './externs/generator-externs.js'],
js_output_file: `${language}_compressed.js`,
output_wrapper: outputWrapperUMD(`Blockly.${namespace}`, [{
diff --git a/tests/deps.js b/tests/deps.js
index 6dad4f6f3..3714c6514 100644
--- a/tests/deps.js
+++ b/tests/deps.js
@@ -1,3 +1,4 @@
+goog.addDependency('../../blocks/all.js', ['Blockly.blocks.all'], ['Blockly.blocks.colour', 'Blockly.blocks.lists', 'Blockly.blocks.logic', 'Blockly.blocks.loops', 'Blockly.blocks.math', 'Blockly.blocks.procedures', 'Blockly.blocks.texts', 'Blockly.blocks.variables', 'Blockly.blocks.variablesDynamic'], {'module': 'goog'});
goog.addDependency('../../blocks/colour.js', ['Blockly.Constants.Colour', 'Blockly.blocks.colour'], ['Blockly', 'Blockly.FieldColour', 'Blockly.FieldLabel'], {'lang': 'es5'});
goog.addDependency('../../blocks/lists.js', ['Blockly.Constants.Lists', 'Blockly.blocks.lists'], ['Blockly', 'Blockly.FieldDropdown', 'Blockly.FieldLabel', 'Blockly.Mutator'], {'lang': 'es6'});
goog.addDependency('../../blocks/logic.js', ['Blockly.Constants.Logic', 'Blockly.blocks.logic'], ['Blockly', 'Blockly.FieldDropdown', 'Blockly.FieldLabel', 'Blockly.Mutator'], {'lang': 'es6'});
@@ -265,6 +266,7 @@ goog.addDependency('../../core/workspace_svg.js', ['Blockly.WorkspaceSvg'], ['Bl
goog.addDependency('../../core/xml.js', ['Blockly.Xml'], ['Blockly.Events.utils', 'Blockly.inputTypes', 'Blockly.utils.Size', 'Blockly.utils.dom', 'Blockly.utils.xml'], {'lang': 'es6', 'module': 'goog'});
goog.addDependency('../../core/zoom_controls.js', ['Blockly.ZoomControls'], ['Blockly.ComponentManager', 'Blockly.Css', 'Blockly.Events.Click', 'Blockly.Events.utils', 'Blockly.IPositionable', 'Blockly.Touch', 'Blockly.browserEvents', 'Blockly.internalConstants', 'Blockly.uiPosition', 'Blockly.utils.Rect', 'Blockly.utils.Size', 'Blockly.utils.Svg', 'Blockly.utils.dom'], {'lang': 'es6', 'module': 'goog'});
goog.addDependency('../../generators/dart.js', ['Blockly.Dart'], ['Blockly.Generator', 'Blockly.inputTypes', 'Blockly.utils.string'], {'lang': 'es6'});
+goog.addDependency('../../generators/dart/all.js', ['Blockly.Dart.all'], ['Blockly.Dart.colour', 'Blockly.Dart.lists', 'Blockly.Dart.logic', 'Blockly.Dart.loops', 'Blockly.Dart.math', 'Blockly.Dart.procedures', 'Blockly.Dart.texts', 'Blockly.Dart.variables', 'Blockly.Dart.variablesDynamic'], {'module': 'goog'});
goog.addDependency('../../generators/dart/colour.js', ['Blockly.Dart.colour'], ['Blockly.Dart'], {'lang': 'es6'});
goog.addDependency('../../generators/dart/lists.js', ['Blockly.Dart.lists'], ['Blockly.Dart'], {'lang': 'es6'});
goog.addDependency('../../generators/dart/logic.js', ['Blockly.Dart.logic'], ['Blockly.Dart'], {'lang': 'es6'});
@@ -275,6 +277,7 @@ goog.addDependency('../../generators/dart/text.js', ['Blockly.Dart.texts'], ['Bl
goog.addDependency('../../generators/dart/variables.js', ['Blockly.Dart.variables'], ['Blockly.Dart'], {'lang': 'es6'});
goog.addDependency('../../generators/dart/variables_dynamic.js', ['Blockly.Dart.variablesDynamic'], ['Blockly.Dart', 'Blockly.Dart.variables']);
goog.addDependency('../../generators/javascript.js', ['Blockly.JavaScript'], ['Blockly.Generator', 'Blockly.inputTypes', 'Blockly.utils.global', 'Blockly.utils.object', 'Blockly.utils.string'], {'lang': 'es6'});
+goog.addDependency('../../generators/javascript/all.js', ['Blockly.JavaScript.all'], ['Blockly.JavaScript.colour', 'Blockly.JavaScript.lists', 'Blockly.JavaScript.logic', 'Blockly.JavaScript.loops', 'Blockly.JavaScript.math', 'Blockly.JavaScript.procedures', 'Blockly.JavaScript.texts', 'Blockly.JavaScript.variables', 'Blockly.JavaScript.variablesDynamic'], {'module': 'goog'});
goog.addDependency('../../generators/javascript/colour.js', ['Blockly.JavaScript.colour'], ['Blockly.JavaScript'], {'lang': 'es6'});
goog.addDependency('../../generators/javascript/lists.js', ['Blockly.JavaScript.lists'], ['Blockly.JavaScript'], {'lang': 'es6'});
goog.addDependency('../../generators/javascript/logic.js', ['Blockly.JavaScript.logic'], ['Blockly.JavaScript'], {'lang': 'es6'});
@@ -285,6 +288,7 @@ goog.addDependency('../../generators/javascript/text.js', ['Blockly.JavaScript.t
goog.addDependency('../../generators/javascript/variables.js', ['Blockly.JavaScript.variables'], ['Blockly.JavaScript'], {'lang': 'es6'});
goog.addDependency('../../generators/javascript/variables_dynamic.js', ['Blockly.JavaScript.variablesDynamic'], ['Blockly.JavaScript', 'Blockly.JavaScript.variables']);
goog.addDependency('../../generators/lua.js', ['Blockly.Lua'], ['Blockly.Generator', 'Blockly.inputTypes', 'Blockly.utils.object', 'Blockly.utils.string'], {'lang': 'es6'});
+goog.addDependency('../../generators/lua/all.js', ['Blockly.Lua.all'], ['Blockly.Lua.colour', 'Blockly.Lua.lists', 'Blockly.Lua.logic', 'Blockly.Lua.loops', 'Blockly.Lua.math', 'Blockly.Lua.procedures', 'Blockly.Lua.texts', 'Blockly.Lua.variables', 'Blockly.Lua.variablesDynamic'], {'module': 'goog'});
goog.addDependency('../../generators/lua/colour.js', ['Blockly.Lua.colour'], ['Blockly.Lua'], {'lang': 'es6'});
goog.addDependency('../../generators/lua/lists.js', ['Blockly.Lua.lists'], ['Blockly.Lua'], {'lang': 'es6'});
goog.addDependency('../../generators/lua/logic.js', ['Blockly.Lua.logic'], ['Blockly.Lua'], {'lang': 'es6'});
@@ -295,6 +299,7 @@ goog.addDependency('../../generators/lua/text.js', ['Blockly.Lua.texts'], ['Bloc
goog.addDependency('../../generators/lua/variables.js', ['Blockly.Lua.variables'], ['Blockly.Lua'], {'lang': 'es6'});
goog.addDependency('../../generators/lua/variables_dynamic.js', ['Blockly.Lua.variablesDynamic'], ['Blockly.Lua', 'Blockly.Lua.variables']);
goog.addDependency('../../generators/php.js', ['Blockly.PHP'], ['Blockly.Generator', 'Blockly.inputTypes', 'Blockly.utils.object', 'Blockly.utils.string'], {'lang': 'es6'});
+goog.addDependency('../../generators/php/all.js', ['Blockly.PHP.all'], ['Blockly.PHP.colour', 'Blockly.PHP.lists', 'Blockly.PHP.logic', 'Blockly.PHP.loops', 'Blockly.PHP.math', 'Blockly.PHP.procedures', 'Blockly.PHP.texts', 'Blockly.PHP.variables', 'Blockly.PHP.variablesDynamic'], {'module': 'goog'});
goog.addDependency('../../generators/php/colour.js', ['Blockly.PHP.colour'], ['Blockly.PHP'], {'lang': 'es6'});
goog.addDependency('../../generators/php/lists.js', ['Blockly.PHP.lists'], ['Blockly.PHP'], {'lang': 'es6'});
goog.addDependency('../../generators/php/logic.js', ['Blockly.PHP.logic'], ['Blockly.PHP'], {'lang': 'es6'});
@@ -305,6 +310,7 @@ goog.addDependency('../../generators/php/text.js', ['Blockly.PHP.texts'], ['Bloc
goog.addDependency('../../generators/php/variables.js', ['Blockly.PHP.variables'], ['Blockly.PHP'], {'lang': 'es6'});
goog.addDependency('../../generators/php/variables_dynamic.js', ['Blockly.PHP.variablesDynamic'], ['Blockly.PHP', 'Blockly.PHP.variables']);
goog.addDependency('../../generators/python.js', ['Blockly.Python'], ['Blockly.Generator', 'Blockly.inputTypes', 'Blockly.utils.string'], {'lang': 'es6'});
+goog.addDependency('../../generators/python/all.js', ['Blockly.Python.all'], ['Blockly.Python.colour', 'Blockly.Python.lists', 'Blockly.Python.logic', 'Blockly.Python.loops', 'Blockly.Python.math', 'Blockly.Python.procedures', 'Blockly.Python.texts', 'Blockly.Python.variables', 'Blockly.Python.variablesDynamic'], {'module': 'goog'});
goog.addDependency('../../generators/python/colour.js', ['Blockly.Python.colour'], ['Blockly.Python'], {'lang': 'es6'});
goog.addDependency('../../generators/python/lists.js', ['Blockly.Python.lists'], ['Blockly.Python'], {'lang': 'es6'});
goog.addDependency('../../generators/python/logic.js', ['Blockly.Python.logic'], ['Blockly.Python'], {'lang': 'es6'});
diff --git a/tests/generators/index.html b/tests/generators/index.html
index 6574e9d64..b258ad18d 100644
--- a/tests/generators/index.html
+++ b/tests/generators/index.html
@@ -8,65 +8,12 @@
diff --git a/tests/playground.html b/tests/playground.html
index ff3a9e448..8e422f1e4 100644
--- a/tests/playground.html
+++ b/tests/playground.html
@@ -11,66 +11,13 @@