Nhiệm vụ Gulp.js, trở lại trên src?


132

Tôi mới sử dụng gulp và đã xem qua các thiết lập ví dụ. Một số người có cấu trúc như sau:

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

Những người khác có điều này:

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

Tôi đang tự hỏi sự khác biệt của sự trở lại trên src làm gì ??

Câu trả lời:


158

Bạn returnchỉ ra rằng nhiệm vụ là không đồng bộ. gulp.src()trả về một luồng, vì vậy nó không đồng bộ.

Không có nó, hệ thống nhiệm vụ sẽ không biết khi nào nó kết thúc. Đọc tài liệu .


Thông minh! cảm ơn đã trả lời Sindre. Có một ngụm chạy như một bùa mê bây giờ. Yêu nó.
boldfacesesignuk

Tuyệt vời chính xác những gì tôi đang tìm kiếm :)
Sebastien Lorber

14
Điều đó có nghĩa là, bạn phải quay lại khi sử dụng gulp.src()? Điều gì xảy ra nếu bạn không trở về gulp.src()?
jbandi

11
Tôi thứ hai @ jbandi's - câu hỏi rõ ràng để hỏi ở đây là "có bao giờ lý do để không trở lại gulp.src(..., hay chúng ta nên làm điều đó luôn?" Câu trả lời này sẽ hữu ích hơn nếu nó giải quyết được điểm đó, IMO; hiện tại nó không giải quyết được tại sao có nhiều ví dụ ngoài kia về các nhiệm vụ gọi gulp.src(...nhưng không trả lại nó.
Mark Amery

2
@jbandi: Nếu bạn không returnthì hệ thống phụ thuộc có thể bắt đầu một nhiệm vụ trước khi hoàn thành các phụ thuộc của nó. Tôi đã có một gulpfile với rất nhiều nhiệm vụ (chủ yếu được tạo bằng mã). Vì tôi không trả lại luồng, nên một tác vụ phụ thuộc đã đọc tệp trong khi phần phụ thuộc của nó vẫn đang được xây dựng. Làm tôi gặp đủ thứ rắc rối ...
gligoran

37

Nếu bạn có các tác vụ phụ thuộc, bạn cần trả về luồng cho các tác vụ để chờ các tác vụ phụ thuộc của chúng hoàn thành trước khi tự chạy.

ví dụ

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

trong ví dụ đó, bạn mong muốn task1 hoàn thành (ví dụ: biên dịch coffeescript hoặc bất cứ thứ gì) trước khi task2 chạy ... nhưng trừ khi chúng ta thêm return - như ví dụ bên dưới - thì chúng sẽ chạy không đồng bộ; và coffeescript đã biên dịch sẽ không được thu nhỏ vì task2 sẽ không đợi tác vụ 1 hoàn thành và do đó sẽ không nhận đầu ra được biên dịch của task1 . Vì vậy, chúng ta nên luôn luôn trở lại trong những trường hợp này.

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

Chỉnh sửa: Công thức ở đây giải thích thêm. https://github.com/gulpjs/gulp/blob/master/docs/recipes/rucky-t task-in-series.md


26

Tôi thấy điều này hữu ích, nếu bạn có nhiều luồng cho mỗi nhiệm vụ. Bạn cần kết hợp / hợp nhất nhiều luồng và trả lại chúng.

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

Cách khác, sử dụng cấu trúc định nghĩa tác vụ Gulps, sẽ là:

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']);
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.