diff --git a/packager/react-packager/src/Bundler/index.js b/packager/react-packager/src/Bundler/index.js index 8ee861d2a71..8e7f21cd961 100644 --- a/packager/react-packager/src/Bundler/index.js +++ b/packager/react-packager/src/Bundler/index.js @@ -351,14 +351,13 @@ class Bundler { if (!resolutionResponse) { let onProgress = noop; if (process.stdout.isTTY && !this._opts.silent) { - const bar = new ProgressBar( - 'transformed :current/:total (:percent)', - {complete: '=', incomplete: ' ', width: 40, total: 1}, - ); - onProgress = (_, total) => { - bar.total = total; - bar.tick(); - }; + const bar = new ProgressBar('transformed :current/:total (:percent)', { + complete: '=', + incomplete: ' ', + width: 40, + total: 1, + }); + onProgress = debouncedTick(bar); } resolutionResponse = this.getDependencies({ @@ -708,4 +707,23 @@ function getMainModule({dependencies, numPrependedDependencies = 0}) { return dependencies[numPrependedDependencies]; } +function debouncedTick(progressBar) { + let n = 0; + let start, total; + + return (_, t) => { + total = t; + n += 1; + if (start) { + if (progressBar.curr + n >= total || Date.now() - start > 200) { + progressBar.total = total; + progressBar.tick(n); + start = n = 0; + } + } else { + start = Date.now(); + } + }; +} + module.exports = Bundler;