2017-03-01 7 views
0

Gulpを使用してCordova開発/展開チェーンをセットアップしようとしています。私はこのgulpfile.jsで終わったが、 "gulp deploy"タスクを実行するために "gulp watch"タスクをkillする必要があるので、私は本当に満足していない。Cordova/Gulpベストプラクティス

var gulp = require('gulp'), 
gutil = require('gulp-util'), 
exec = require('gulp-exec'); 
var spawn = require('child_process').spawn; 
var stripDebug = require('gulp-strip-debug'); 
var uglify = require('gulp-uglify'); 

/** 
* Config ogj 
*/ 
var config = { 
    jsDir: 'www/assets/js', 
    jsDirBrowser: 'platforms/browser/www/assets/js', 
    production: !!gutil.env.production 
}; 

/** 
* Automatically run 'cordova prepare browser' after any modification 
* into the www directory - really useful for development/deplyment purpose 
* 
* @see watch task 
*/ 
gulp.task('prepare', function() { 
    gutil.log('Prepare browser'); 
    var options = { 
     continueOnError: false, // default = false, true means don't emit error event 
     pipeStdout: false, // default = false, true means stdout is written to file.contents 
     customTemplatingThing: "test" // content passed to gutil.template() 
    }; 
    var reportOptions = { 
     err: true, // default = true, false means don't write err 
     stderr: true, // default = true, false means don't write stderr 
     stdout: true // default = true, false means don't write stdout 
    } 
    return gulp.src('./**/**') 
    .pipe(exec('cordova prepare browser', options)) 
    .pipe(exec.reporter(reportOptions)); 

}); 

/** 
* Watch for changes in www 
*/ 
gulp.task('watch', function() { 
    gulp.watch('www/**/*', ['prepare']); 
}); 

/** 
* Default task 
*/ 
gulp.task('default', ['prepare']); 


/** 
* Javascript production depolyment. 
*/ 
gulp.task('deploy-js', function() { 
    gutil.log('Deploy'); 
    return gulp.src(config.jsDir + '/*.js') 
    .pipe(stripDebug()) 
    .pipe(uglify()) 
    .pipe(gulp.dest(config.jsDirBrowser)); 
}); 

/** 
* Production deployment 
* To be run before uploading files to the server with no gulp instaces running 
*/ 
gulp.task('deploy', ['deploy-js']); 

これはGulpを使用してCordovaプロジェクトを開発し、拒否するためのベストプラクティスですか?

[編集] 私はこの問題が「準備」タスクにあると思います。おそらく、gulp-execの問題が原因で返されることはありませんが、実際にデバッグする方法はわかりません。

+0

あなたは何をしようとしていますか? 'watch'はコントロールをあなたに返しません。ファイルが変更されるたびに展開をトリガーしますか? –

+0

ファイルを変更するたびに「準備」をトリガーし、サーバー、apkまたはipaにプッシュする準備ができたら手動で「デプロイ」をトリガーします。実際には、もしgulp watchが実行されているときに "gulp deploy"を実行すると、何もしません。おそらく "準備"がjs minifiedファイルを突然上書きするからです。 – g4b0

+0

これはたぶん理由があるでしょう。異なるタスクに別々の宛先を使用してみてください。また、デプロイメントタスクの宛先フォルダ内の変更がprepare - この行 - > 'gulp.watch( 'www/*' '/ * '、[' prepare']); ' –

答えて

0

私が唯一の問題は、あなたがgulp deploy

準備作業が原因watch機能の動作を返すことはありません実行するためgulpコマンドはあなたに制御を返さないということです理解してきたものから - あなたは渡されましたがファイルをwatchに制御すると、視聴を停止したときにのみ返されます。予想される動作であり、probably due a gulp-exec issueではありません。私はこのような状況で採用う

ソリューションはwatchingdeployを実行するために私のためにバックグラウンドに移動するようにネイティブnohup gulp &を使用して、バックグラウンドでgulpタスクを実行することです。

+0

これは動作しません。また、nohupとgulpをバックグラウンドで実行している場合、 'gulp deploy'はjsスクリプトを小さくしません。私が気づいたことの一つは、ファイルの変更時刻が変更されているため、 'gulp deploy'がその作業をしているように見えますが、突然' gulp watch'がそれらを上書きします。 – g4b0