coffee-scrunch

Concatenate CoffeeScript files with style

Scrunch

Assembles coffee-script files.

It's like browserify, but only for coffee-script and doesn't package npm dependencies (like fs and http).

$ sudo npm install -g coffee-scrunch
$ scrunch--help
 
  Usage: scrunch.js [options]
 
  Options:
 
    -h, --help        output usage information
    -V, --version     output the version number
    -v, --verbose     Detailed logs
    -i, --in [file]   Input file
    -o, --out [file]  Write to file
 
var scrunch = require('coffee-scrunch');
 
var options = {
    input: 'init.coffee',
    output: 'app.js', // optional 
    log: false // optional 
};
 
scrunch(options).then(function () {
    console.log('finished');
});
# a.coffee 
= require './b'
console.log('[a] running b...')
b()
# b.coffee 
= require './c'
module.exports = ->
    console.log('[b] running c...')
    c()
# c.coffee 
module.exports = ->
    console.log('[c] ...being run')
$ scrunch -i a.coffee -o app.js
(function() {
  var _require;
 
  _require = function(index) {
    var exportsmodule;
    module = _require.cache[index];
    if (!module) {
      exports = {};
      module = _require.cache[index= {
        id: index,
        exports: exports
      };
      _require.modules[index].call(exportsmoduleexports);
    }
    return module.exports;
  };
 
  _require.cache = [];
 
  _require.modules = [
    function(moduleexports) {
      var b;
      = _require(1);
      console.log('[a] running b...');
      return b();
    }function(moduleexports) {
      var c;
      = _require(2);
      return module.exports = function() {
        console.log('[b] running c...');
        return c();
      };
    }function(moduleexports) {
      return module.exports = function() {
        return console.log('[c] ...being run');
      };
    }
  ];
 
  _require(0);
 
}).call(this);
$ coffee app.coffee
[a] running b...
[b] running c...
[c] ...being run
  • Use Substacks node-resolve to resolve dependencies.
  • Add support for options.log. If set, it will log what it is doing. Useful for debugging.
  • Switch from kew to bluebird for promises.
  • Fix bug with files being loaded when they don't exist
  • Log errors in bin/scrunch.js
  • Breaking: Rewrite api to be way easier to use
  • Use async IO and promises
  • Clean up code and add more comments
  • Write tests for most things
  • Replace require() calls to keep code size down
  • Use the same require() function as pure-cjs