mcjs

Merge CommonJS modules into a single file. Overhead-free.


Keywords
browserify, npm, bundle, build, require, module, package, browser-pack, module-deps, commonjs, cjs, cjsc, uncommon, uncommonjs, webpack, merge modules, merge, compile, small, powerbuild
License
Unlicense
Install
npm install mcjs@2.0.0

Documentation

MCJS experimental

Merge Common JS modules into a single module.

MCJS produces a single module with all inner requirements merged into a single scope with resolved name conflicts. That way it gains maximum compressability and minimal overhead. Smaller than browserify, component, webpack, powerbuild, small.

Some stats

Compare minified gzip-sizes:

Package Browserify bundle-collapser MCJS Effect
plotly.js 516kb 508kb 494kb 4.5%
color-space 5kb 4.4kb 12%
mcjs 4.02kb 2.71kb 32.6%
mod 16.5kb 13kb 27%

Usage

Install

$ npm install mcjs

Use as a browserify plugin:

browserify index.js -p mcjs/plugin

dep.js:

var z = 123;
module.exports = z;

index.js:

var a = require('./dep');
module.exports = a;

Resulting bundle.js:

var m_a, m_index;

var z = 123;
m_a = z;

var a = m_a;
module.exports = a;

Motivation

Closure compiler can expand any objects, so if to merge modules into a single scope, which means to resolve global vars conflict and to replace all module.exports and require calls, then we get one-scoped bundle, which closure compiler compresses the way better than separated by scopes browserified/compiled bundle.

Mcjs does the same task as a ClosureCompiler with --process_commonjs_modules flag, but avoids creating of goog.provide's and makes variables more human-readable.

NPM

Reference