wmakeev
2/23/2015 - 3:38 PM

Build Taist addon (browserify + watchify + gulp)

Build Taist addon (browserify + watchify + gulp)

var gulp        = require('gulp')
  , fs          = require('fs')
  , browserify  = require('browserify')
  , watchify    = require('watchify')
  , reactify    = require('reactify')
  , insert      = require('gulp-insert')
  , source      = require('vinyl-source-stream')
  ;

function handleError(name) {
    return function (err) {
        throw new Error(err || name)
    }
}

function scripts(watch) {
    var bundler, rebundle;
    bundler = browserify('./src/index.jsx', {
        basedir: __dirname,
        //debug: !production,
        cache: {},          // required for watchify
        packageCache: {},   // required for watchify
        fullPaths: watch    // required to be true only for watchify
    });
    if(watch) {
        bundler = watchify(bundler)
    }

    //bundler.transform(reactify);

    rebundle = function() {
        var stream = bundler.bundle();
        stream.on('error', handleError('Browserify'));

        stream = stream
            .pipe(source('addon.js'))
            .pipe(insert.wrap(
                'function init() { var bundle = ',
                ';return { start: bundle("./src/index.jsx") }};'
            ));

        return stream.pipe(gulp.dest('build/taist'));
    };

    bundler.on('update', rebundle);
    return rebundle();
}

gulp.task('scripts', function() {
    return scripts(false);
});

gulp.task('watchScripts', function() {
    return scripts(true);
});

gulp.task('default', ['scripts']);