From e05b105dc6f5ee924dd963365ff3a83f49b5ca0b Mon Sep 17 00:00:00 2001 From: Jeffrey Posnick Date: Thu, 3 Dec 2020 11:06:19 -0500 Subject: [PATCH] Preserve symbols across builds, don't mangle _handle (#2687) * Preserve symbols across builds * let => const --- gulp-tasks/build-packages.js | 5 +++-- gulp-tasks/build-sw-packages.js | 4 +++- gulp-tasks/build-window-packages.js | 4 +++- gulp-tasks/utils/rollup-helper.js | 8 +++++++- 4 files changed, 16 insertions(+), 5 deletions(-) diff --git a/gulp-tasks/build-packages.js b/gulp-tasks/build-packages.js index 071ab8c54..8fe014ca8 100644 --- a/gulp-tasks/build-packages.js +++ b/gulp-tasks/build-packages.js @@ -60,8 +60,9 @@ module.exports = { parallel( build_node_packages, build_node_ts_packages, - build_sw_packages, - build_window_packages, + // This needs to be a series, not in parallel, so that there isn't a + // race condition with the terser nameCache. + series(build_sw_packages, build_window_packages), ), ), }; diff --git a/gulp-tasks/build-sw-packages.js b/gulp-tasks/build-sw-packages.js index d865065a8..ed4139623 100644 --- a/gulp-tasks/build-sw-packages.js +++ b/gulp-tasks/build-sw-packages.js @@ -158,7 +158,9 @@ function swBundleSequence() { return series( parallel(transpilations), - parallel(builds), + // This needs to be a series, not in parallel, so that there isn't a + // race condition with the terser nameCache. + series(builds), ); } diff --git a/gulp-tasks/build-window-packages.js b/gulp-tasks/build-window-packages.js index 863874b03..b7d34eb66 100644 --- a/gulp-tasks/build-window-packages.js +++ b/gulp-tasks/build-window-packages.js @@ -102,7 +102,9 @@ function windowBundleSequence() { return series( parallel(transpilations), - parallel(builds), + // This needs to be a series, not in parallel, so that there isn't a + // race condition with the terser nameCache. + series(builds), ); } diff --git a/gulp-tasks/utils/rollup-helper.js b/gulp-tasks/utils/rollup-helper.js index 39862887b..9ae9919ce 100644 --- a/gulp-tasks/utils/rollup-helper.js +++ b/gulp-tasks/utils/rollup-helper.js @@ -15,6 +15,9 @@ const terserPlugin = require('rollup-plugin-terser').terser; const constants = require('./constants'); const getVersionsCDNUrl = require('./versioned-cdn-url'); +// See https://github.com/GoogleChrome/workbox/issues/1674 +const nameCache = {}; + module.exports = { // Every use of rollup should have minification and the replace // plugin set up and used to ensure as consist set of tests @@ -46,6 +49,7 @@ module.exports = { const minifyBuild = buildType === constants.BUILD_TYPES.prod; if (minifyBuild) { const terserOptions = { + nameCache, module: buildFormat === 'esm' ? true : false, mangle: { properties: { @@ -54,8 +58,10 @@ module.exports = { '_obj', // We need this to be exported correctly. '_private', + // See https://github.com/GoogleChrome/workbox/issues/2686 + '_handle', ], - // mangle > properties > regex will allow uglify-es to minify + // mangle > properties > regex will allow terser to minify // private variable and names that start with a single underscore // followed by a letter. This restriction to avoid mangling // unintentional fields in our or other libraries code.