2017-08-14 8 views
1

私はこれを2時間かけて裂いてきました。それぞれのプロジェクトのバージョンの資産に引いた後、ビルドプロセスでそれらを使用し、gitコマンドが終了するまでgulp-gitを一時停止するには?

var gulp = require('gulp'); 

var concat = require("gulp-concat"); 
var rename = require("gulp-rename"); 
var run_sequence = require("run-sequence"); 
var del = require("del"); 
var git = require("gulp-git"); 
var wait = require("gulp-wait"); 

var dest = 'build/'; 

var vendor_javascript_files = [ 
    'node_modules/jquery/dist/jquery.js', 
]; 

var app_javascript_files = [ 
    'app.js', 
]; 

// Remove the existing build directory 
gulp.task("prepare",function() { 
    return del([dest, "branding_assets/"]); 
}); 

gulp.task("get-branding", function() { 
    return git.clone('http://gitserver.local/prod-branding.git', {args: './branding_assets'}, function (err) { 
     if (err) { 
     throw err; 
     } 
    }); 
}); 

gulp.task("get-dev-branding", function() { 
    return git.clone('http://gitserver.local/dev-branding.git', {args: './branding_assets'}, function (err) { 
     if (err) { 
     throw err; 
     } 
    }); 
}); 

gulp.task('vendor-js', function() { 
    return gulp.src(vendor_javascript_files) 
     .pipe(concat("vendor.js")) 
     .pipe(gulp.dest(dest+"app")); 
}); 

gulp.task('app-files', function() { 
    return gulp.src(['app.js']) 
     .pipe(gulp.dest(dest+"app")); 
}); 

gulp.task('branding', function() { 
    return gulp.src('branding_assets/*') 
     .pipe(wait(2000)) 
     .pipe(gulp.dest(dest+"assets")) 
}); 

gulp.task('app-js', function() { 
    return gulp.src("index.html.dist") 
     .pipe(rename("index.html")) 
     .pipe(gulp.dest(dest)); 
}); 

gulp.task('build', function() { 
    run_sequence(
     "prepare", 
     "get-branding", 
     [ 
      "app-files", 
      "app-js", 
      "vendor-js", 
      // imagine there are many more tasks here - "app-css", "vendor-css", "app-sass", etc. Upwards of 10 tasks. 
      "branding", 
     ], 
    ); 
}); 

gulp.task('build-dev', function() { 
    run_sequence(
     "prepare", 
     "get-dev-branding", 
     [ 
      "app-files", 
      "app-js", 
      "vendor-js", 
      // imagine there are many more tasks here - "app-css", "vendor-css", "app-sass", etc. Upwards of 10 tasks. 
      "branding", 
     ], 
    ); 
}); 

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

私は何をしようとしていることで、ゴクゴク作業中:

は、ここに私の簡略化gulpfileです。

問題は、クローンが完了する前にgulp.cloneタスクがすぐに戻ることです。したがって、起動時にファイルがまだ存在しないため、brandingタスクは何も行いません。

ブランディングタスクを一時停止するために.wait(2000)を使用しましたが、実際には動作しません(数十ミリ秒でブランディングタスクが完了します)。2)一時停止が発生しても機能しませんでしたsrc関数が実行された時点でソースファイルが選択されているため、正しく表示されますか?

多分gulpは私の仕事のための適切なタスクランナーではありませんが、私は選択がありません - 生産環境はgulpを使用します。

get-brandingタスクを個々のビルドタスク(「アプリファイル」など)に依存するように使用すると、代わりにget-dev-brandingを実行することがあります。私は、タスクがクローンが終了する直前に常に戻ってきて、動作しないので、依存関係としてget-brandingで個別のアプリケーションビルドタスクを別々のタスクに移動する "ネスト"戦略を実行しようとしました。

"このファイルが存在するまで待つ"というものは見つかりません。ソースファイルを列挙する前に、グルップタスクを確実に一時停止するためのものは何も見つかりません。私は同じページを何度も何度も何度も打つGoogleのサークルに入っています。

答えて

1

関数のコールバックステータスをgulpに戻すことができるように、関数にコールバックを追加する必要があります。この行ってコールバック関数は、内部でどのように動作するかの詳細については

gulp.task("get-branding", function(done) { 
    git.clone('http://gitserver.local/prod-branding.git', {args: './branding_assets'}, function (err) { 
     if (err) { 
      done(err); 
     } 
     done(); 
    }); 
}); 

、あなたが見ることができます:gulp: where is the gulp task callback function defined?

をコールバック関数は、Orchestratorの(または新しいものから来ている - 葬儀 - がぶ飲み4に)実際には への呼び出しだけで、あなたのタスクが「完了」していることをタスクシステムに伝えるだけです。彼らはその点を明確にするために、今後のドキュメントで

gulp.task('something', function(done) { ... }); 

に それを変更する理由です。

+0

ああ私の神、それは働いた...ありがとう!あなたはちょうどより多くの別れた髪から頭皮を救った。 :-) – fdmillion

関連する問題