глоток.запуск не рекомендуется. Как мне составить задачи?


вот составленная задача, которую я не знаю, как заменить ее зависимостями задач.

...
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 [осуждающий глоток.беги]

9 94

9 ответов:

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']);
});

вам больше не нужно пройти функцию (хотя вы все еще можете) для выполнения задач. Вы можете дать watch массив имен задач, и он сделает это за вас.

или вы можете сделать так:

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

источник:https://github.com/gulpjs/gulp/issues/755

gulp.start() никогда не предназначался для публичного api и не использовался. И как указано выше в комментариях, управление задачами заменяется в следующем release....so 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();
});

Простите меня за воскрешение старого вопроса. Принятый ответ не решает проблему выполнения задач перед установкой часов. Следующий ответ использует глоток.начало, которое уходит. Третий ответ указывает на то, что регулярные функции должны использоваться, но пример кажется странным. Я сделал некоторые поиски, но не нашел простой пример.

вот мое решение. Идея состоит в том, чтобы определить регулярные функции 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);

Я новичок, чтобы глотать. Пожалуйста, дайте мне знать, если я упустил что-то очевидное.

как @dman упоминает, что,gulp.start будут удалены в следующей версии. Также его можно увидеть в это вопрос глотка.

и в комментариях к ответу @Павла Евстигнеева, @joemaller упоминает, что мы можем использовать run-sequence в этом случае.

но обратите внимание, что автор run-sequence говорит:

это предназначено для временного решения до выпуска gulp 4.0, который имеет поддержка определения зависимостей задач последовательно или параллельно.

имейте в виду, что это решение является взломом, и может перестать работать с будущим обновлением, чтобы глотать.

Итак, перед gulp 4.0 мы можем использовать run-sequence, после 4.0, мы можем просто использовать залпом.

Если вам нужно поддерживать порядок выполнения задач, вы можете определить зависимости, как описано здесь - вам просто нужно вернуть поток из зависимости:

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

определите задачу, которая от нее зависит:

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

и использовать его из watch:

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

теперь dependecy задача будет завершена до depends запускает (например, ваши задачи "Жасмин" и "встраивание" будут зависимостями, и у вас будет еще одна задача "сервер", которая будет зависеть на них.) Нет необходимости в каких-либо хаки.

чтобы запустить задачу перед началом просмотра, вместо того, чтобы использовать 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/'));

или вы можете обернуть этот последний код в" нормальную " функцию и вызвать его, когда захотите.

-- вдохновлен этот ответ из аналогичного потока.

залпом 4

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

Мне нравится gulp4 !

Я до сих пор не понимаю, как это на самом деле решает вопрос.

если у меня есть 4 задачи с определенными зависимостями между ними

A, B, C, D

где A зависит от B, и т. д., Как это определено gulp.task('A',['B'],function A(){}); и затем я определил новую задачу, используя залпом.часы, работающие только функции, будут дублировать зависимости.

например, учитывая эти задачи (каждая функция задачи выставляется через имя):

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: в случае, если кому-то интересно, почему я хочу, чтобы моя задача часов выполните, если какая-либо из зависимых задач не выполняется, как правило, потому, что я использую watch для живой разработки. например. я начинаю свою задачу часов, чтобы начать работать над тестами и т. д. и может быть, что исходный код, с которого я начинаю, уже имеет проблемы, поэтому ошибки.

поэтому я надеюсь, что gulp run или какой-то эквивалент останется на некоторое время