web-dev-qa-db-ja.com

gulp.runは非推奨です。タスクを作成するにはどうすればよいですか?

これは、タスクの依存関係で置き換える方法がわからない合成タスクです。

...
gulp.task('watch', function () {
 var server = function(){
  gulp.run('jasmine');
  gulp.run('embed');
 };
 var client = function(){
  gulp.run('scripts');
  gulp.run('styles');
  gulp.run('copy');
  gulp.run('lint');
 };
 gulp.watch('app/*.js', server);
 gulp.watch('spec/nodejs/*.js', server);
 gulp.watch('app/backend/*.js', server);
 gulp.watch('src/admin/*.js', client);
 gulp.watch('src/admin/*.css', client);
 gulp.watch('src/geojson-index.json', function(){
  gulp.run('copygeojson');
 });
});

対応する変更ログ https://github.com/gulpjs/gulp/blob/master/CHANGELOG.md#35 [非推奨gulp.run]

95
toutpt
gulp.task('watch', function () {
  var server = ['jasmine', 'embed'];
  var client = ['scripts', 'styles', 'copy', 'lint'];
  gulp.watch('app/*.js', server);
  gulp.watch('spec/nodejs/*.js', server);
  gulp.watch('app/backend/*.js', server);
  gulp.watch('src/admin/*.js', client);
  gulp.watch('src/admin/*.css', client);
  gulp.watch('src/geojson-index.json', ['copygeojson']);
});

タスクを実行するために関数を渡す必要はありません(まだ可能です)。あなたはウォッチにタスク名の配列を与えることができ、それはあなたのためにこれを行います。

80
Contra

または、次のようにすることができます:

gulp.start('task1', 'task2');
86

ソース: https://github.com/gulpjs/gulp/issues/755

gulp.start()がパブリックAPIになることも使用されることもありませんでした。また、上記のコメントで述べたように、タスク管理は次のリリースで置き換えられます。..gulp.start()は壊れます。

Gulp設計の真の意図は、通常のJavascript関数を作成し、それらを呼び出すタスクのみを作成することです。

例:

function getJsFiles() {
    var sourcePaths = [
        './app/scripts/**/*.js',
        '!./app/scripts/**/*.spec.js',
        '!./app/scripts/app.js'
    ];

    var sources = gulp.src(sourcePaths, { read: false }).pipe(angularFilesort());

    return gulp.src('./app/index.html')
        .pipe(injector(sources, { ignorePath: 'app', addRootSlash: false }))
        .pipe(gulp.dest('./app'));
}  

gulp.task('js', function () {
    jsStream = getJsFiles();
});
25
dman

古い質問を復活させてください。受け入れられた答えは、監視を設定する前にタスクを実行する問題に対処していません。次の回答では、gulp.startを使用しますが、これはなくなります。 3番目の答えは、通常の関数を使用する必要があることを示していますが、例は奇妙に思えます。いくつかの検索を行いましたが、簡単な例は見つかりませんでした。

これが私の解決策です。アイデアは、通常のjs関数を定義し、それらをタスクとして登録することです。その後、必要に応じて、またはウォッチ内から関数を直接呼び出すことができます。

var 
  gulp     = require('gulp'),
  concat   = require('gulp-concat'),
  markdown = require('gulp-showdown')
;
var scriptFiles   = [ 'ang/app.js' ];
var markdownFiles = [ 'content/articles/*.md'];

var watchTask = function() 
{
  buildTask();

  gulp.watch(scriptFiles,  ['scripts' ]);
  gulp.watch(markdownFiles,['markdown']);
};
gulp.task('watch',watchTask);

var buildTask = function()
{
  scriptsTask();
  markdownTask();
};
gulp.task('build',buildTask);

var markdownTask = function() 
{
  gulp.src(markdownFiles)
    .pipe(markdown())
    .pipe(gulp.dest('web/articles'));
};
gulp.task('markdown',markdownTask);

var scriptsTask = function() 
{
  gulp.src(scriptFiles)
    .pipe(concat('app.js'))
    .pipe(gulp.dest('web/js'));

  gulp.src(
    [
      'bower_components/angular/angular.min.js',
      'bower_components/angular-route/angular-route.min.js'
    ])
    .pipe(concat('vendor.js'))
    .pipe(gulp.dest('web/js'));

  gulp.src(
    [
      'bower_components/angular/angular.min.js.map',
      'bower_components/angular-route/angular-route.min.js.map'
    ])
    .pipe(gulp.dest('web/js'));
};
gulp.task('scripts', scriptsTask);

私はガルプが初めてです。明らかな何かを見落としている場合はお知らせください。

12
Cerad

ガルプ4

gulp.parallel('taskName1', 'taskName2')()
gulp.series('taskName1', 'taskName2')()

Gulp4が好き!

5
vomvoru

@dmanが言及しているように、次のバージョンではgulp.startは破棄されます。また、それは gulpのこの問題 で見ることができます。

また、@ Pavel Evstigneevの回答のコメントで、@ joemallerは 実行シーケンス このシナリオでは。

ただし、run-sequenceの作成者は次のように述べていることに注意してください。

これは、gulp 4.0がリリースされるまで、タスクの依存関係を直列または並列に定義することをサポートする一時的な解決策です。

このソリューションはハッキングであり、gulpの今後の更新で動作しなくなる可能性があることに注意してください。

したがって、gulp 4.0より前では、次を使用できます。 実行シーケンス、4.0以降では、gulpを使用できます。

5
Qianyue

実行中のタスクの順序を維持する必要がある場合は、説明されているように依存関係を定義できます here -依存関係からストリームを返すだけです。

gulp.task('dependency', function () {
  return gulp.src('glob')
    .pipe(plumber())
    .pipe(otherPlugin())
    .pipe(gulp.dest('destination'));
});

依存するタスクを定義します。

gulp.task('depends', [ 'dependency' ], function () {
  // do work
});

そして、時計からそれを使用します:

gulp.task('watch', function () {
  watch('glob', [ 'depends' ]);
});

これで、dependecyタスクはdependsの実行前に完了します(たとえば、「jasmine」タスクと「embed」タスクは依存関係になり、それらに依存する別のタスク「server」が必要になります)。ハックの必要はありません。

3
Killah

Gulp 4で私にとって機能していると思われる唯一のことは:

gulp.task('watch', function() {
    gulp.watch(['my-files/**/*'], gulp.series('my-func'));
});

gulp.task('my-func', function() {
    return gulp.src('[...]').pipe(gulp.dest('...'));
});
1
Jules Colle

監視を開始する前にタスクを実行するには、gulp.run()またはgulp.start()を使用する代わりに、gulpコマンドを直接実行します。

代わりに:

var compress = function () {
    return gulp.src('js/vendor/*.js')
        .pipe(concat('vendor.js'))
        .pipe(gulp.dest('./build/js/'));
};

ただやる:

gulp.src('js/vendor/*.js')
        .pipe(concat('vendor.js'))
        .pipe(gulp.dest('./build/js/'));

または、後者のコードを「通常の」関数でラップし、いつでも呼び出すことができます。

- 同様のスレッドからのこの回答 に触発されました。

1
bergie3000

私はまだ、これが実際に目の前の質問をどのように解決するかわかりません。

依存関係が定義された4つのタスクがある場合

あいうえお

ここで、Aはgulp.task('A',['B'],function A(){});で定義されているBなどに依存しており、関数のみを実行するgulp.watchを使用して依存関係を複製する新しいタスクを定義しました。

たとえば、これらのタスクを指定すると(各タスクは名前で公開されます):

function A(){}
gulp.task('A',['B'],A);

function A(){}
gulp.task('A',['B'],A);

function B(){}
gulp.task('B',['C'],B);

function C(){}
gulp.task('C',['D'],C);

function D(){}
gulp.task('D',[],D);

私は1を書くことができます

gulp.task('WATCHER', ['A'], function(){
   ...
}

これはA-> Dを実行しますが、たとえばステップBが失敗した場合、タスクを開始することはありません(コンパイルまたはテストエラーのことを考えてください)

または私は2を書くことができます

gulp.task('WATCHER', [], function(){
   gulp.watch(...,['A'])
}

最初に何かが変更されるまで、A-> Dは実行されません。

または私は3を書くことができます

gulp.task('WATCHER', [], function(){
   D();
   C();
   B();
   A();
   gulp.watch(...,['A'])
}

これにより、依存関係階層の重複(および経時的なエラー)が発生します。

PS:依存タスクのいずれかが失敗した場合、通常はライブ開発にウォッチを使用しているため、誰かがなぜウォッチタスクを実行したいのか疑問に思っている場合。例えば。私は監視タスクを開始してテストなどの作業を開始しますが、開始する最初のコードにはすでに問題があり、エラーが発生している可能性があります。

だから私はgulpが実行されるか、いくつかの同等のものがしばらくの間滞在することを願っています

0
mgoetzke