sunzi-fabric
Version:
made by fabric@3.2.0
193 lines (151 loc) • 6.35 kB
JavaScript
var fs = require('fs');
var exec = require('child_process').exec;
var args = process.argv.slice(2);
var buildDev = args.indexOf('dev') > -1;
var distributionPath = 'dist/';
var minifier = 'uglifyjs';
var mininfierCmd = 'uglifyjs --compress --mangle --output fabric.min.js fabric.js';
var distFileContents = '/* build: `node build.js` */';
function appendFileContents(fileNames, callback) {
(function readNextFile() {
if (fileNames.length <= 0) {
return callback();
}
var fileName = fileNames.shift();
if (!fileName) {
return readNextFile();
}
fs.readFile(__dirname + '/' + fileName, function (err, data) {
if (err) throw err;
var strData = String(data);
// noRequire
strData = strData.replace(/\/\* _AMD_START_ \*\/[\s\S]*?\/\* _AMD_END_ \*\//g, '');
// noSVGExport
strData = strData.replace(/\/\* _TO_SVG_START_ \*\/[\s\S]*?\/\* _TO_SVG_END_ \*\//g, '');
// noSVGImport
strData = strData.replace(/\/\* _FROM_SVG_START_ \*\/[\s\S]*?\/\* _FROM_SVG_END_ \*\//g, '');
distFileContents += ('\n' + strData + '\n');
readNextFile();
});
})();
}
var filesToInclude = [
'HEADER.js',
'src/globalFabric.js',
// 'lib/event.js',
'src/mixins/observable.mixin.js',
'src/mixins/collection.mixin.js',
'src/mixins/shared_methods.mixin.js',
'src/util/misc.js',
// ifSpecifiedInclude('accessors', 'src/util/named_accessors.mixin.js'),
'src/util/arc.js',
'src/util/lang_array.js',
'src/util/lang_object.js',
'src/util/lang_string.js',
'src/util/lang_class.js',
'src/util/dom_event.js',
'src/util/dom_style.js',
'src/util/dom_misc.js',
'src/util/dom_request.js',
'src/log.js',
'src/util/animate.js',
// ifSpecifiedInclude('animation', 'src/util/animate_color.js'),
//'src/util/animate.js',
// ifSpecifiedInclude('easing', 'src/util/anim_ease.js'),
// ifSpecifiedInclude('parser', 'src/parser.js'),
// ifSpecifiedInclude('parser', 'src/elements_parser.js'),
'src/point.class.js',
'src/intersection.class.js',
'src/color.class.js',
// ifSpecifiedInclude('gradient', 'src/gradient.class.js'),
// ifSpecifiedInclude('pattern', 'src/pattern.class.js'),
// ifSpecifiedInclude('shadow', 'src/shadow.class.js'),
'src/static_canvas.class.js',
'src/brushes/base_brush.class.js',
'src/brushes/pencil_brush.class.js',
'src/brushes/circle_brush.class.js',
// 'src/brushes/spray_brush.class.js',
// 'src/brushes/pattern_brush.class.js',
'src/canvas.class.js',
'src/mixins/canvas_events.mixin.js',
'src/mixins/canvas_grouping.mixin.js',
'src/mixins/canvas_dataurl_exporter.mixin.js',
// ifSpecifiedInclude('serialization', 'src/mixins/canvas_serialization.mixin.js'),
'src/mixins/canvas_gestures.mixin.js',
'src/shapes/object.class.js',
'src/mixins/object_origin.mixin.js',
'src/mixins/object_geometry.mixin.js',
'src/mixins/object_stacking.mixin.js',
'src/mixins/object.svg_export.js',
'src/mixins/stateful.mixin.js',
'src/mixins/object_interactivity.mixin.js',
// ifSpecifiedInclude('animation', 'src/mixins/animation.mixin.js'),
'src/shapes/line.class.js',
'src/shapes/circle.class.js',
// 'src/shapes/triangle.class.js',
// 'src/shapes/ellipse.class.js',
'src/shapes/rect.class.js',
'src/shapes/polyline.class.js',
// 'src/shapes/polygon.class.js',
'src/shapes/path.class.js',
'src/shapes/group.class.js',
'src/shapes/active_selection.class.js',
'src/shapes/image.class.js',
'src/brushes/erasure_brush.class.js',
// ifSpecifiedInclude('object_straightening', 'src/mixins/object_straightening.mixin.js'),
'src/filters/base_filter.class.js',
// 'src/filters/blendimage_filter.class.js',
// 'src/filters/webgl_backend.class.js',
'src/filters/2d_backend.class.js',
// ifSpecifiedInclude('image_filters', 'src/filters/colormatrix_filter.class.js'),
// ifSpecifiedInclude('image_filters', 'src/filters/brightness_filter.class.js'),
// ifSpecifiedInclude('image_filters', 'src/filters/convolute_filter.class.js'),
// ifSpecifiedInclude('image_filters', 'src/filters/grayscale_filter.class.js'),
// ifSpecifiedInclude('image_filters', 'src/filters/invert_filter.class.js'),
// ifSpecifiedInclude('image_filters', 'src/filters/noise_filter.class.js'),
// ifSpecifiedInclude('image_filters', 'src/filters/pixelate_filter.class.js'),
// ifSpecifiedInclude('image_filters', 'src/filters/removecolor_filter.class.js'),
// ifSpecifiedInclude('image_filters', 'src/filters/filter_generator.js'),
'src/filters/blendcolor_filter.class.js',
// ifSpecifiedInclude('image_filters', 'src/filters/resize_filter.class.js'),
// ifSpecifiedInclude('image_filters', 'src/filters/contrast_filter.class.js'),
// ifSpecifiedInclude('image_filters', 'src/filters/saturate_filter.class.js'),
// ifSpecifiedInclude('image_filters', 'src/filters/blur_filter.class.js'),
// 'src/filters/gamma_filter.class.js',
// ifSpecifiedInclude('image_filters', 'src/filters/composed_filter.class.js'),
// ifSpecifiedInclude('image_filters', 'src/filters/hue_rotation.class.js'),
'src/shapes/text.class.js',
'src/mixins/text_style.mixin.js',
// 'src/shapes/itext.class.js',
// 'src/mixins/itext_behavior.mixin.js',
// 'src/mixins/itext_click_behavior.mixin.js',
// ifSpecifiedInclude('itext', 'src/mixins/itext_key_behavior.mixin.js'),
// ifSpecifiedInclude('itext', 'src/mixins/itext.svg_export.js'),
// 'src/shapes/textbox.class.js',
];
process.chdir(distributionPath);
appendFileContents(filesToInclude, function() {
fs.writeFile('fabric.js', distFileContents, function (err) {
if (err) {
console.log(err);
throw err;
}
if (buildDev) {
process.exit(0);
}
console.log('Built distribution to ' + distributionPath + 'fabric.js');
exec(mininfierCmd, function (error, output) {
if (error) {
console.error('Minification failed using', minifier, 'with', mininfierCmd);
console.error('Minifier error output:\n' + error);
process.exit(1);
}
console.log('Minified using', minifier, 'to ' + distributionPath + 'fabric.min.js');
// gzip
exec('gzip -c fabric.min.js > fabric.min.js.gz', function (error, output) {
console.log('Gzipped to ' + distributionPath + 'fabric.min.js.gz');
});
});
});
});
// }