The ultimate transformation/build/compilation middleware/command line/etc. system for node.js
npm install transformcoffee-script and uglify-js (npm install coffee-script uglify-js)
javascript
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:
`javascript
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.