Завдання Gulp.js, повернутись на src?


132

Я новачок, ковтаючи і шукаю приклад налаштування. Деякі люди мають таку структуру:

gulp.task("XXXX", function() {
    gulp.src("....

У інших людей це:

gulp.task("XXXX", function() {
   return gulp.src("....

Мені цікаво, яка різниця робить прибуток на src ??

Відповіді:


158

Ви returnповинні вказати, що завдання - це асинхронізація. gulp.src()повертає потік, значить, це асинхронізація.

Без нього система завдань не знала б, коли вона закінчиться. Прочитайте документи .


Відмінно! дякую за відповідь Sindre. Зараз ковтають як принадність. Любіть це.
boldfacedesignuk

Дивовижно саме те, що я шукав :)
Себастьян Лорбер

14
Чи означає це, що ви повинні повернутися під час використання gulp.src()? Що станеться, якщо ти не повернешся gulp.src()?
jbandi

11
Я другий @ jbandi's - очевидне питання, яке потрібно задати тут, "чи є коли-небудь причини не повертатися gulp.src(..., чи ми повинні робити це завжди?" Ця відповідь була б кориснішою, якби вона стосувалася цього питання, IMO; на даний момент він не вирішує, чому є багато прикладів завдань, які викликають, gulp.src(...але не повертають їх.
Марк Амері

2
@jbandi: Якщо цього не зробити, returnсистема залежності може запустити завдання до того, як будуть виконані його залежності. У мене є gulpfile з безліччю завдань (в основному генерується код). Оскільки я не повертав потік, залежна задача вже читала файл, поки його залежність ще нарощувалася. Потрапив мені у всілякі клопоти ...
gligoran

37

Якщо у вас є залежні завдання, вам потрібно повернути потік, щоб завдання чекали завершення їх залежних завдань до запуску самих.

напр

// without return
gulp.task('task1', function() {
    gulp.src('src/coffee/*.coffee')
      /* eg compile coffeescript here */
     .pipe(gulp.dest('src'));
});

gulp.task('task2', ['task1'], function() {
    gulp.src('src/*.js')
      /* eg minfify js here */
     .pipe(gulp.dest('dest'));
});

У цьому прикладі можна було очікувати task1 для завершення (наприклад , складання CoffeeScript або будь-який інший ) до TASK2 пробігів ... але якщо ми не додамо повернення - як приклад нижче - тоді вони будуть працювати синхронно НЕ асинхронно; і скомпільований CoffeeScript НЕ буде мінімізований , оскільки task2 не ждали завдання 1 , щоб закінчити і тому не буде забрати на скомпільований виході task1 . Тому ми завжди повинні повертатися в цих умовах.

// with return
gulp.task('task1', function() {
    return gulp.src('**/*.coffee')
      /* your operations here */
     .pipe(gulp.dest('dest'));
});

gulp.task('task2', ['task1'], function() {
    return gulp.src('**/*.js')
      /* your operations here */
     .pipe(gulp.dest('dest'));
});

Редагувати: Рецепт тут пояснює це далі. https://github.com/gulpjs/gulp/blob/master/docs/recipes/running-tasks-in-series.md


26

Я вважаю це корисним, якщо у вас є кілька потоків на кожне завдання. Вам потрібно об’єднати / об'єднати кілька потоків і повернути їх.

var gulp = require('gulp');
var merge = require('gulp-merge');

gulp.task('test', function() {
    var bootstrap = gulp.src('bootstrap/js/*.js')
        .pipe(gulp.dest('public/bootstrap'));

    var jquery = gulp.src('jquery.cookie/jquery.cookie.js')
        .pipe(gulp.dest('public/jquery'));

    return merge(bootstrap, jquery);
});

Альтернативою, використовуючи структуру визначення задачі Gulps, було б:

var gulp = require('gulp');

gulp.task('bootstrap', function() {
    return gulp.src('bootstrap/js/*.js')
        .pipe(gulp.dest('public/bootstrap'));
});

gulp.task('jquery', function() {
    return gulp.src('jquery.cookie/jquery.cookie.js')
        .pipe(gulp.dest('public/jquery'));
});

gulp.task('test', ['bootstrap', 'jquery']);
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.