2015-08-31 4 views
0

У меня есть приложение JS, которое используется watchify.Gulp - concat результат проверки нескольких файлов JS

Итак, я хочу выполнить результат команды watchify с некоторыми другими файлами javascripts, которые имеют тенденцию быть глобальными (jQuery и т. Д.). Вот моя команда Javascript watchify.

var source = require('vinyl-source-stream'); 
var gulp = require('gulp'); 
var gutil = require('gulp-util'); 
var browserify = require('browserify'); 
var reactify = require('reactify'); 
var watchify = require('watchify'); 
var notify = require("gulp-notify"); 

var scriptsDir = './scripts'; 
var buildDir = './build'; 


function handleErrors() { 
    var args = Array.prototype.slice.call(arguments); 
    notify.onError({ 
    title: "Compile Error", 
    message: "<%= error.message %>" 
    }).apply(this, args); 
    this.emit('end'); // Keep gulp from hanging on this task 
} 


function buildScript(file, watch) { 
    var props = {entries: [scriptsDir + '/' + file]}; 
    var bundler = watch ? watchify(props) : browserify(props); 
    bundler.transform(reactify); 
    function rebundle() { 
    var stream = bundler.bundle({debug: true}); 
    return stream.on('error', handleErrors) 
    .pipe(source(file)) 
    .pipe(gulp.dest(buildDir + '/')); 
    } 
    bundler.on('update', function() { 
    rebundle(); 
    gutil.log('Rebundle...'); 
    }); 
    return rebundle(); 
} 


gulp.task('build', function() { 
    return buildScript('main.js', false); 
}); 


gulp.task('default', ['build'], function() { 
    return buildScript('main.js', true); 
}); 

Вот задача, которую я использую для добавления файлов javascript.

return gulp.src([ 
    './bower_components/jquery/dist/jquery.min.js', 
    './bower_components/redactor-wysiwyg/redactor/redactor.js', 
    './build/main.js' // output of `gulp build`. 
]).pipe(concat('application.js')) 
    .pipe(gulp.dest('./public/')); 

Как я могу Concat эти JavaScript файлов с помощью одной функции buildScript?

ответ

0

Главный ключ заключается в том, что поток nodejs имеет событие end. Таким образом,

function rebundle() { 
    var stream = bundler.bundle({debug: true}); 

    stream.on('end', function() { gulp.start('everything_you_want') }); 

    return stream.on('error', handleErrors) 
    .pipe(source(file)) 
    .pipe(gulp.dest(buildDir + '/')); 
}