it-swarm.com.ru

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

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

80
Contra

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

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

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

Вот мое решение. Идея состоит в том, чтобы определить обычные функции 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 будет отклонен в следующей версии. Также это можно увидеть в этот выпуск глотка .

И в комментариях к ответу @Pavel Evstigneev, @joemaller упоминает, что мы можем использовать выполнения последовательности в этом сценарии.

Но, пожалуйста, обратите внимание, что автор run-sequence говорит:

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

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

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

5
Qianyue

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

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 задачи с зависимостями, определенными между ними

А, В, С, D

где A зависит от B и т. д., как определено gulp.task('A',['B'],function A(){});, а затем я определил новую задачу, используя 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: В случае, если кто-то задается вопросом, почему я хотел бы, чтобы моя задача наблюдения выполнялась, если какая-либо из зависимых задач терпит неудачу, это обычно потому, что я использую часы для живой разработки. например. я начинаю свою задачу наблюдения, чтобы начать работу над тестами и т. д., и может случиться так, что исходный код, с которого я начинаю, уже имеет проблемы, таким образом, ошибки.

Так что я надеюсь, что глоток или какой-то эквивалент останется на некоторое время

0
mgoetzke