Add support for specifying which modules to exclude during build.

For example:

`node build.js modules=ALL exclude=easing`

or:

`node build.js modules=serialization,easing exclude=image_filters,text`

Add support for stripping "use strict" directives during build (for compatibility with Rails 3).
This commit is contained in:
kangax 2012-07-19 13:34:32 +02:00
parent ea699a776a
commit 92a8a3d34c
5 changed files with 42 additions and 11 deletions

View file

@ -1,4 +1,4 @@
/*! Fabric.js Copyright 2008-2012, Bitsonnet (Juriy Zaytsev, Maxim Chernyak) */
/*! Fabric.js Copyright 2008-2012, Printio (Juriy Zaytsev, Maxim Chernyak) */
var fabric = fabric || { version: "0.8.34" };

View file

@ -1,13 +1,22 @@
var fs = require('fs'),
exec = require('child_process').exec;
var modules = process.argv.slice(2)[0];
modules = modules ? modules.split('=')[1].split(',') : [ ];
var buildArgs = process.argv.slice(2),
buildArgsAsObject = { };
var minifier = process.argv.slice(3)[0];
buildArgs.forEach(function(arg) {
var key = arg.split('=')[0],
value = arg.split('=')[1];
buildArgsAsObject[key] = value;
});
var modulesToInclude = buildArgsAsObject.modules ? buildArgsAsObject.modules.split(',') : [ ];
var modulesToExclude = buildArgsAsObject.exclude ? buildArgsAsObject.exclude.split(',') : [ ];
var minifier = buildArgsAsObject.minifier || 'yui';
var mininfierCmd;
minifier = minifier ? minifier.split('=')[1] : 'yui';
if (minifier === 'yui') {
mininfierCmd = 'java -jar lib/yuicompressor-2.4.2.jar dist/all.js -o dist/all.min.js';
}
@ -15,9 +24,15 @@ else if (minifier === 'closure') {
mininfierCmd = 'java -jar lib/google_closure_compiler.jar --js dist/all.js --js_output_file dist/all.min.js';
}
var includeAllModules = modules.length === 1 && modules[0] === 'ALL';
var includeAllModules = modulesToInclude.length === 1 && modulesToInclude[0] === 'ALL';
var noStrict = 'no-strict' in buildArgsAsObject;
var distFileContents = '/* build: `node build.js modules=' + modules.join(',') + '` */\n';
var distFileContents =
'/* build: `node build.js modules=' +
modulesToInclude.join(',') +
(modulesToExclude.length ? (' exclude=' + modulesToExclude.join(',')) : '') +
(noStrict ? ' no-strict' : '') +
'` */\n';
function appendFileContents(fileNames, callback) {
@ -35,6 +50,9 @@ function appendFileContents(fileNames, callback) {
fs.readFile(__dirname + '/' + fileName, function (err, data) {
if (err) throw err;
if (noStrict) {
data = String(data).replace(/"use strict";?\n?/, '');
}
distFileContents += (data + '\n');
readNextFile();
});
@ -43,14 +61,27 @@ function appendFileContents(fileNames, callback) {
}
function ifSpecifiedInclude(moduleName, fileName) {
return (modules.indexOf(moduleName) > -1 || includeAllModules) ? fileName : '';
var isInIncludedList = modulesToInclude.indexOf(moduleName) > -1;
var isInExcludedList = modulesToExclude.indexOf(moduleName) > -1;
// excluded list takes precedence over modules=ALL
return ((isInIncludedList || includeAllModules) && !isInExcludedList) ? fileName : '';
}
var filesToInclude = [
'HEADER.js',
ifSpecifiedInclude('serialization', 'lib/json2.js'),
(
(
(modulesToInclude.indexOf('serialization') > -1 || includeAllModules) &&
(modulesToExclude.indexOf('json') == -1))
// only include json if serialization module is specified, AND if json is not explicitly excluded
? 'lib/json2.js'
: ''
),
ifSpecifiedInclude('text', 'lib/cufon.js'),
'src/log.js',

2
dist/all.js vendored
View file

@ -1,5 +1,5 @@
/* build: `node build.js modules=ALL` */
/*! Fabric.js Copyright 2008-2012, Bitsonnet (Juriy Zaytsev, Maxim Chernyak) */
/*! Fabric.js Copyright 2008-2012, Printio (Juriy Zaytsev, Maxim Chernyak) */
var fabric = fabric || { version: "0.8.34" };

2
dist/all.min.js vendored
View file

@ -1,4 +1,4 @@
/* Fabric.js Copyright 2008-2012, Bitsonnet (Juriy Zaytsev, Maxim Chernyak) */
/* Fabric.js Copyright 2008-2012, Printio (Juriy Zaytsev, Maxim Chernyak) */
var fabric=fabric||{version:"0.8.34"};if(typeof exports!="undefined"){exports.fabric=fabric}if(typeof document!="undefined"&&typeof window!="undefined"){fabric.document=document;fabric.window=window}else{fabric.document=require("jsdom").jsdom("<!DOCTYPE html><html><head></head><body></body></html>");fabric.window=fabric.document.createWindow()}fabric.isTouchSupported="ontouchstart" in fabric.document.documentElement;if(!this.JSON){this.JSON={}}(function(){function f(n){return n<10?"0"+n:n}if(typeof Date.prototype.toJSON!=="function"){Date.prototype.toJSON=function(key){return isFinite(this.valueOf())?this.getUTCFullYear()+"-"+f(this.getUTCMonth()+1)+"-"+f(this.getUTCDate())+"T"+f(this.getUTCHours())+":"+f(this.getUTCMinutes())+":"+f(this.getUTCSeconds())+"Z":null};String.prototype.toJSON=Number.prototype.toJSON=Boolean.prototype.toJSON=function(key){return this.valueOf()}}var cx=/[\u0000\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,escapable=/[\\\"\x00-\x1f\x7f-\x9f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,gap,indent,meta={"\b":"\\b","\t":"\\t","\n":"\\n","\f":"\\f","\r":"\\r",'"':'\\"',"\\":"\\\\"},rep;function quote(string){escapable.lastIndex=0;return escapable.test(string)?'"'+string.replace(escapable,function(a){var c=meta[a];return typeof c==="string"?c:"\\u"+("0000"+a.charCodeAt(0).toString(16)).slice(-4)})+'"':'"'+string+'"'}function str(key,holder){var i,k,v,length,mind=gap,partial,value=holder[key];if(value&&typeof value==="object"&&typeof value.toJSON==="function"){value=value.toJSON(key)}if(typeof rep==="function"){value=rep.call(holder,key,value)}switch(typeof value){case"string":return quote(value);case"number":return isFinite(value)?String(value):"null";case"boolean":case"null":return String(value);case"object":if(!value){return"null"}gap+=indent;partial=[];if(Object.prototype.toString.apply(value)==="[object Array]"){length=value.length;for(i=0;i<length;i+=1){partial[i]=str(i,value)||"null"}v=partial.length===0?"[]":gap?"[\n"+gap+partial.join(",\n"+gap)+"\n"+mind+"]":"["+partial.join(",")+"]";gap=mind;return v}if(rep&&typeof rep==="object"){length=rep.length;for(i=0;i<length;i+=1){k=rep[i];if(typeof k==="string"){v=str(k,value);if(v){partial.push(quote(k)+(gap?": ":":")+v)}}}}else{for(k in value){if(Object.hasOwnProperty.call(value,k)){v=str(k,value);if(v){partial.push(quote(k)+(gap?": ":":")+v)}}}}v=partial.length===0?"{}":gap?"{\n"+gap+partial.join(",\n"+gap)+"\n"+mind+"}":"{"+partial.join(",")+"}";gap=mind;return v}}if(typeof JSON.stringify!=="function"){JSON.stringify=function(value,replacer,space){var i;gap="";indent="";if(typeof space==="number"){for(i=0;i<space;i+=1){indent+=" "}}else{if(typeof space==="string"){indent=space}}rep=replacer;if(replacer&&typeof replacer!=="function"&&(typeof replacer!=="object"||typeof replacer.length!=="number")){throw new Error("JSON.stringify")}return str("",{"":value})}}if(typeof JSON.parse!=="function"){JSON.parse=function(text,reviver){var j;function walk(holder,key){var k,v,value=holder[key];if(value&&typeof value==="object"){for(k in value){if(Object.hasOwnProperty.call(value,k)){v=walk(value,k);if(v!==undefined){value[k]=v}else{delete value[k]}}}}return reviver.call(holder,key,value)}text=String(text);cx.lastIndex=0;if(cx.test(text)){text=text.replace(cx,function(a){return"\\u"+("0000"+a.charCodeAt(0).toString(16)).slice(-4)})}if(/^[\],:{}\s]*$/.test(text.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,"@").replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,"]").replace(/(?:^|:|,)(?:\s*\[)+/g,""))){j=eval("("+text+")");return typeof reviver==="function"?walk({"":j},""):j}throw new SyntaxError("JSON.parse")}}}());
/*
* Copyright (c) 2009 Simo Kinnunen.

BIN
dist/all.min.js.gz vendored

Binary file not shown.