2015-09-18 30 views
6

Sto creando 3 bundle minificati per la mia applicazione. Ho 2 compiti per fare questo, minify e bundle. Minify ha una dipendenza dal bundle. Se eseguo minify, entrambe le attività vengono eseguite senza errori. I bundle sono creati, ma i file minificati non lo sono. Se rimuovo la dipendenza dal pacchetto, posso quindi eseguire minify da solo e i file minificati vengono creati correttamente. Questo mi porta a credere che forse i file sono in uso quando si attiva il task minify (perché bundle non ha finito?). Come faccio ad aspettare che i file siano completamente pronti? Posso passare il flusso? O forse combinare questi in un unico compito? Il motivo per cui non sono attualmente un singolo compito è perché generano 2 file per pacchetto (un pacchetto non miniato e un pacchetto minificato).Gulp bundle then minify

var outFolder = __dirname + '\\Scripts\\dist'; 
var appBundles = [ 
    { scripts: ['Scripts/Common/**/*.js'], output: 'eStore.common.js' }, 
    { scripts: ['Scripts/Checkout/**/*.js'], output: 'eStore.checkout.js' }, 
    { scripts: ['Scripts/ProductDetail/**/*.js'], output: 'eStore.product.js' } 
]; 

gulp.task('bundle', bundle); 
gulp.task('minify', ['bundle'], minify); // this one doesn't work 
gulp.task('minifyOnly', minify);   // this one works 

function bundle() { 
    appBundles.forEach(function (appBundle) { 
     gulp.src(appBundle.scripts) 
      .pipe(concat(appBundle.output)) 
      .pipe(sourcemaps.init()) 
      .pipe(sourcemaps.write(outFolder + '\\maps')) 
      .pipe(gulp.dest(outFolder)) 
      .on('error', errorHandler); 
    }); 
} 

function minify() { 
    appBundles.forEach(function(appBundle) { 
     var bundleSrc = outFolder + '\\' + appBundle.output; 
     gulp.src(bundleSrc) 
      .pipe(rename({ extname: '.min.js' })) 
      .pipe(uglify()) 
      .pipe(gulp.dest(outFolder)) 
      .on('error', errorHandler); 
    }); 
} 

risposta

2

Fare in modo che l'attività di minify utilizzi gli stessi file di origine utilizzati dall'operazione di raggruppamento. 'concat' verrà utilizzato in entrambe le attività. In questo modo la minify non ha una dipendenza dall'output dall'attività bundle.

function minify() { 
    appBundles.forEach(function (appBundle) { 
     console.log('Creating minified bundle for: ' + appBundle.output); 
     gulp.src(appBundle.scripts) 
      .pipe(concat(appBundle.output)) 
      .pipe(rename({ extname: '.min.js' })) 
      .pipe(uglify()) 
      .pipe(gulp.dest(outFolder)) 
      .on('error', errorHandler); 
    }); 
} 

function bundle() { 
    appBundles.forEach(function (appBundle) { 
     console.log('Creating bundle and sourcemaps: ' + appBundle.output); 
     gulp.src(appBundle.scripts) 
      .pipe(concat(appBundle.output)) 
      .pipe(sourcemaps.init()) 
      .pipe(sourcemaps.write(outFolder + '\\maps')) 
      .pipe(gulp.dest(outFolder)) 
      .on('error', errorHandler); 
    }); 
}