mkwtys/bundle-size

View on GitHub
lib/bundle-bytes.js

Summary

Maintainability
A
1 hr
Test Coverage
'use strict';

const browserify = require('browserify');
const envify = require('envify/custom');
const uglify = require('uglify-js');
const zlib = require('zlib');

module.exports = (packages, env) => {
  const files = Array.isArray(packages) ? packages : [packages];
  let data = '';
  let pkgIds = files.slice();

  return new Promise((resolve, reject) => {
    const bundler = browserify();

    files.forEach((file, i) => {
      bundler.require(file);
      bundler.on('package', (pkg) => {
        if (pkg.name === file) {
          pkgIds[i] = pkg._id;
        }
      });
    });

    if (env) {
      process.env.NODE_ENV = env;
      bundler.transform(envify({
        NODE_ENV: env
      }));
    }

    bundler.bundle()
      .on('data', (buf) => {
        data += buf.toString();
      })
      .on('end', () => {
        const minify = uglify.minify(data, {
          mangle: false,
          compress: {
            dead_code: true
          }
        });
        const results = {
          packages: pkgIds,
          bundle: data.length,
          min: minify.code.length
        };
        if (env) {
          results.env = env;
        }
        zlib.gzip(minify.code, (err, buffer) => {
          if (err) {
            console.error(err);
          }
          results.gzip = buffer.toString('base64').length;
          resolve(results);
        });
      });
  });
};