Newer
Older
pixi.js / scripts / bundle.js
#!/usr/bin/env node

var minimist = require('minimist');
var browserify = require('browserify');
var source = require('vinyl-source-stream');
var buffer = require('vinyl-buffer');
var vfs = require('vinyl-fs');
var uglify = require('gulp-uglify');
var empty = require('gulp-empty');
var sourcemaps = require('gulp-sourcemaps');
var path = require('path');

// Get the commandline arguments
var args = minimist(process.argv.slice(2), {
    alias: { e: 'exclude' }
});

var bundler = browserify({
    entries: './src/',
    debug: true
});

// Get the license for the header
var license = path.join(__dirname, 'license.js');
bundler.plugin('./scripts/header.js', { file: license });

// Exclude certain modules
if (args.exclude) {
    var excludes = args.exclude;
    if (!Array.isArray(excludes)) {
        excludes = [excludes];
    }
    excludes.forEach(function(exclude){
        try {
            bundler.ignore(require.resolve('../src/' + exclude));
            console.log('> Ignoring module \'%s\'', exclude);
        }
        catch(e){
            console.log('> ERROR: Module not found for \'%s\'', exclude);
        }
    });
    console.log('');
}

function bundle(output, debug) {
    bundler.bundle()
        .pipe(source(output))
        .pipe(buffer())
        .pipe(sourcemaps.init({loadMaps: true}))
            .pipe(debug ? empty() : uglify({
                mangle: true,
                preserveComments: function(node, comment) {
                    if (/\@preserve/m.test(comment.value)) {
                        return true;
                    }
                }
            }))
        .pipe(sourcemaps.write('./'))
        .pipe(vfs.dest('./bin/'));
}

// Build the bundles
bundle('pixi.js', true);
bundle('pixi.min.js', false);