Skip to content


Folders and files

Last commit message
Last commit date

Latest commit



82 Commits

Repository files navigation


Pure CommonJS Modules builder.


  • Minimal destination overhead (almost as small as concatenated file).
  • Resolves all the paths on build stage to static number identifiers (so saves space and execution time used for storing and resolving string paths, but should be used only for projects with static require('./some/module') calls and would fail on others (same restriction applicable for r.js (Simplified CommonJS wrapper) and most projects already match this).
  • Ability to export module.exports from top module in UMD style (useful for building libs).
  • Allows to use through-stream(s) for pre-transformations.
  • Supports modules installed as npm dependencies in node_modules hierarchy.
  • Does not corrupt require('systemModule') calls, transforms only local ones.

Console usage


npm install -g pure-cjs

Command-line options:

-h, --help             output usage information
-V, --version          output the version number
-i, --input <file>     input file (required)
-o, --output <file>    output file (defaults to <input>.out.js)
-m, --map <file>       file to store source map to (optional, defaults to <output>.map)
-c, --comments         preserve comments in output
-e, --exports <id>     top module exports destination (optional)
-x, --extension <ext>  default extension for requires (defaults to "js")
-d, --module-dir <dir> modules directory name to look in (defaults to "node_modules")
-s, --external [hash]  external modules (names or JSON hashes)


pure-cjs \
    --input src/index.js \
    --output dist/index.js \
    --map \
    --exports SuperLib \
    --external lodash \
    --external '{"jquery": {"global": "$", "amd": "../vendor/jquery.js"}}'

Usage from Grunt

Check out grunt-pure-cjs to use builder as Grunt plugin.

Usage from Gulp

Check out gulp-pure-cjs to use builder as Gulp plugin.

Usage from Node.js code

var cjs = require('pure-cjs');

cjs.transform(options).then(function (result) {
    // handle successful result
}, function (err) {
    // handle error

Options object

  • input: String | Function().
    Input file.
    Example: 'superLib/topModule.js'

  • output: String | Function(input)
    Output file.
    Default: input => input.replace(/(\.js)?$/, '.out.js')

  • map: Boolean | String | Function(input, output)
    Source map.
    Default: false (don't generate source map).

  • comments: Boolean
    Preserve comments in output.
    Default: false

  • external: { cjsName: (true | { amd?: String, global?: String }) }
    External dependencies (to be excluded from bundling). Example:

      jquery: true,
      lodash: {amd: '../vendor/lodash.js', global: '_'}
  • exports: String | Function(input, output)
    Export top module with UMD with given global object name.
    Default: no exports.

  • transform: Array | Function(input)
    Browserify plugins (through-stream(s) to be used against input files).

  • moduleDir: String
    Modules directory name.
    Default: "node_modules"

  • defaultExt: String
    Default extension for require calls ("js").

  • dryRun: Boolean
    Don't write output to disk (and don't append //# sourceMappingURL=... to code).
    Default: false

Result object

  • code: String — generated source code.
  • map: Object — source map object.
  • options: Object — options object with resolved defaults and paths.


Pure minimalistic CommonJS builder







No releases published


No packages published