node.js - Post Build Sonrasında Visual Studio'dan Gulp Çalıştırmada Tutarsız Sonuçlar


Ben gulp 3.9.0 kullanıyorum ve bazı gulp komutlarını Visual Studio 2013'ten çağırıyorum. Akış öyle ki, VS'de her derleme yaptığımda, gulp geçici ve çıktı dosyalarımı temizlemeli, ardından başarılı bir derlemeden sonra javascript varlıklarımı tek bir dosyada derlemeli.

Sorun şu ki, "gulp build" çalıştırdıktan sonra bazen varlıklarımın hiç oluşturulmadığını fark ettim. Bu durum komut satırında bile oluyor. "gulp clean" (çıktıyı kaldıran) çalıştırdıktan sonra, çıktıyı görebilmek için "gulp build" komutunu iki kez çalıştırmam gerekiyor. Sanki gulp sessizce hata veriyor gibi. Bunun Windows üzerinde çalışan Node ile ilgili bir sorun mu yoksa bir şeyi yanlış yapılandırmış olmam mı olduğundan emin değilim.

VS'nin tüm TypeScript dosyalarını \output klasöründe tek bir .js dosyasına derlemekten sorumlu olduğunu unutmayın.

Yapmaya çalıştığım şeyi yapmanın daha iyi bir yolu varsa şimdiden özür dilerim. Hâlâ bir gulp/node acemisiğim.

VS Önceden Derleme:

gulp clean

VS Derleme Sonrası:

gulp build

gulpfile.js:

var gulp = require('gulp');
var del = require('del');
var concat = require('gulp-concat');
var ngAnnotate = require('gulp-ng-annotate');
var uglify = require('gulp-uglify');
var templateCache = require('gulp-angular-templatecache');
var concatCss = require('gulp-concat-css');
var minifyCss = require('gulp-minify-css');

gulp.task("cleanOutdatedLibraries", function(){
    del("./Libs/*");
    del(['./myapp.js', './myapp.min.js', './myapp.css'])
});

gulp.task("cleanTemporaryFiles", function(){
    del("./output/*");
});

/** Run gulp clean on prebuild */
gulp.task('clean', ["cleanOutdatedLibraries", "cleanTemporaryFiles"])

gulp.task('copyNewestLibraries', function(){

    var bowerFiles = ['angular/angular.min.js',
        'angular/angular.js',
        'angular/angular.min.js.map',
        'angular-ui-router/release/angular-ui-router.min.js',
        'angular-local-storage/dist/angular-local-storage.min.js',
        'jquery/dist/jquery.min.js',
        'jquery/dist/jquery.min.map',
        'lodash/lodash.min.js',
        'angular-resource/angular-resource.min.js',
        'angular-resource/angular-resource.min.js.map',
        'momentjs/min/moment.min.js',
        'angular-loading-bar/src/loading-bar.js',
        'ngDialog/js/ngDialog.min.js'];

    gulp.src(bowerFiles, {cwd: "./bower_components/"})
        .pipe(gulp.dest('./Libs'));

});   

gulp.task('copyThirdPartyLibraries', function(){

    var thirdPartyFiles = ['jquery-ui.min.js',
        'angular-sanitize.min.js'];

    gulp.src(thirdPartyFiles, {cwd: "./_thirdparty/"})
        .pipe(gulp.dest('./Libs'));
});


/** Merge all Angular JS HTML templates into a cache */
gulp.task('mergeHtmlTemplatesIntoAngularCache', function(){
    gulp.src('app/**/*.html')
        .pipe(templateCache("templates.js", {
            module: "myapp"
        }))
        .pipe(gulp.dest('./output/'));    
});

gulp.task('produceMinfiedApp', function(){
    gulp.src(['app/**/*.js', 'output/typescripts.js'])
        .pipe(concat('bundle.min.js'))
        .pipe(ngAnnotate())
        .pipe(uglify())
        .pipe(gulp.dest('./output/'));

    gulp.src(['output/bundle.min.js', 'output/templates.js'])
        .pipe(concat('myapp.min.js'))
        .pipe(gulp.dest('./'));

});

gulp.task('produceApp', function(){
    gulp.src(['app/**/*.js', 'output/typescripts.js'])
        .pipe(concat('bundle.js'))
        .pipe(ngAnnotate())
        .pipe(gulp.dest('./output/'));

    gulp.src(['output/bundle.js', 'output/templates.js'])
        .pipe(concat('myapp.js'))
        .pipe(gulp.dest('./'));
});

gulp.task('mergeStyles', function(){
    gulp.src(['Styles/**/*.css'])
        .pipe(concat('styles.css'))
        .pipe(gulp.dest("./output/"));
    gulp.src(['app/**/*.css'])
        .pipe(concat('app.css'))
        .pipe(gulp.dest("./output/"));

    gulp.src(['output/styles.css', 'output/app.css'])
        .pipe(concatCss("./myapp.css"))
        .pipe(minifyCss({compatibility: 'ie10'}))
        .pipe(gulp.dest('./'));
});

/** Run gulp build on post build */
gulp.task('build', ["copyNewestLibraries", 
    "copyThirdPartyLibraries",
    "mergeHtmlTemplatesIntoAngularCache",
    "produceMinfiedApp",
    "produceApp", 
    "mergeStyles"]);

Cevap #1

/** Run gulp build on post build */
gulp.task('build', ["copyNewestLibraries", 
    "copyThirdPartyLibraries",
    "mergeHtmlTemplatesIntoAngularCache",
    "produceMinfiedApp",
    "produceApp", 
    "mergeStyles"]);

Bu görevler (copyNewestLibraries, produceApp, vb.) eşzamanlı olarak, belirli bir sıraya bağlı olmadan çalışır. Örneğin, produceApp, muhtemelen istemediğiniz şekilde, copyNewestLibraries'den önce bitirebilir.

Daha fazla bilgi için Gulp görevlerini ardışık olarak nasıl çalıştıracağınızı görün.