transform

The ultimate transformation/build/compilation middleware/command line/etc. system for node.js

transform

The ultimate transformation/build/compilation middleware/command line/etc. system for node.js

$ npm install transform

The following example compiles coffe-script to JavaScript files and minifies all JavaScript files (including those generated by coffee-script in the previous step). To run this sample you will need to also install coffee-script and uglify-js (npm install coffee-script uglify-js)

var express = require('express');
var app = express();
 
var path = require('path');
 
var transform = require('transform');
 
app.use(transform(path.join(__dirname, 'source'))
        .using(function (transform) {
          transform.add('.jade', '.html', 'jade');
 
          //It's OK to have multiple formats that all result in the same extension 
          //only one will be active per file though 
          transform.add('.less', '.css', 'less');
          transform.add('.styl', '.css', 'stylus');
          transform.add('.sass', '.css', 'sass');
 
          //these files will first be transformed by coffee-script and then by 
          //uglify-js if enabled bellow. 
          transform.add('.coffee', '.js', 'coffee-script', {bare: true});
 
          //we can easilly set it up to only minify in production 
          if (process.env.NODE_ENV && process.env.NODE_ENV != 'development')
            transform.add('.js', '.js', 'uglify');
        })
        .to(path.join(__dirname, 'destination')));
 
 
app.listen(3000);

The code for .to is:

function (destination) {
  if (process.env.NODE_ENV && process.env.NODE_ENV != 'development') {
    return this.statically(destination);
  } else {
    return this.dynamically();
  }
}

Calling .statically(destination) compiles the files to physical files in destination and then serves them using connect's static middleware.

Calling .dynamically() returns middleware that compiles each file every time they are requested.

MIT