Skip to content

Instantly share code, notes, and snippets.

@levidehaan
Created April 12, 2012 00:33
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save levidehaan/2363756 to your computer and use it in GitHub Desktop.
Save levidehaan/2363756 to your computer and use it in GitHub Desktop.
Little Compressor
var http = require("http"),
url = require("url"),
path = require("path"),
fs = require("fs"),
uggoP = require("uglify-js").parser,
uggo = require("uglify-js").uglify,
port = process.argv[2] || 8675,
server = http.createServer(function(request, response) {
var uri = url.parse(request.url).pathname, combined_file = "";
if(uri.indexOf(",") >= 1){
var libs = uri.split(",");
for(var i=0;i<libs.length;i++){
if(i === 0){
libs[i] = libs[i].split("/")[1];
}
var filename = combine(libs[i]);
path.exists(filename, function(exists) {
console.log("exists: "+exists);
var file = fs.readFileSync(filename);
var buf = new Buffer(file);
combined_file += buf.toString();
}(filename));
}
console.log("COMBINED FILE: " + combined_file);
var encased_files = encase(combined_file);
console.log(encased_files);
sendEncased(encased_files);
}
function combine(file){
var filename;
switch(file){
case "jQuery":
filename = path.join(process.cwd(), "/js/jQuery_uncompressed.1.7.2.js");
break;
case "backbone":
filename = path.join(process.cwd(), "/js/backbone.js");
break;
case "json2":
filename = path.join(process.cwd(), "/js/json2.js");
break;
case "underscore":
filename = path.join(process.cwd(), "/js/underscore.js");
break;
case "jqm":
filename = path.join(process.cwd(), "/js/jquery-mobile.js");
break;
}
return filename;
}
function encase(file){
var parse = uggoP.parse(file);
parse = uggo.ast_mangle(parse);
parse = uggo.ast_squeeze(parse);
return uggo.gen_code(parse);
}
function sendEncased(file){
response.writeHead(200, {
"Content-Type": "text/javascript"
});
response.write(file, "binary");
response.end();
}
}).listen(parseInt(port, 10));
console.log("encasejs running on port: "+port);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment