Tôi đang sử dụng Gulp để thu thập tiền chất (thông qua plugin gulp-front-matter) và sau đó, sau khi tổng hợp nó, tôi sẽ lưu nó vào một tệp khác. Trong số các dữ liệu khác, tôi đang lưu một nhóm CSS. Dưới đây là những gì tôi có cho nhiệm vụ compileCSS
của mình:Làm cách nào để bạn chạy tác vụ "kết thúc" trên gulp nhưng chỉ ở cuối tác vụ hiện tại?
var collected = [];
gulp.src('./client/**/*.html')
.pipe(frontMatter({ property: 'meta', remove: true }))
.pipe(through.obj(function(file, enc, callback) {
var css = file.meta;
collected.push(css);
}))
.pipe(gulp.dest('./build/templates'))
.on('end', function() {
var cssPath = ['build', 'assets', 'css', 'compiled.css'];
fs.writeFileSync(cssPath.join(path.sep), cssPath);
})
;
Tác vụ hoạt động như mong đợi (lưu ý, đây là phiên bản được đơn giản hóa). Mọi thứ hoạt động như mong đợi và tôi nhận được tệp compiled.css
với tất cả CSS phía trước. Tuy nhiên, tôi tìm thấy một nhu cầu sử dụng Prefixer không chỉ trên tập tin css thường xuyên của tôi nhưng trên biên dịch mới này. Vì vậy, tôi đã tạo ra một nhiệm vụ prefix
:
gulp.task('prefix', ['compileCSS', 'copy'], function() {
gulp.src('./build/assets/css/*.css')
.pipe(autoprefixer({ browsers: ['last 3 versions'] }))
.pipe(gulp.dest('build'))
;
});
Bây giờ, vấn đề là các on('end'
chức năng chạy ở phần cuối của TẤT CẢ các nhiệm vụ, không chỉ là nhiệm vụ compileCSS
.
Câu hỏi của tôi là, có cách nào để chèn tác vụ loại "khi kết thúc" cho mỗi tác vụ không? Hay có cách nào để sử dụng các luồng bằng cách nào đó (vì nhiệm vụ cuối cùng không phải là luồng thực sự và không tận dụng lợi thế của nó, tôi không thấy cách).
Có phải không chỉ là chúng đang chạy đồng thời vì bạn chưa cung cấp gọi lại? https://github.com/gulpjs/gulp/blob/master/docs/recipes/running-tasks-in-series.md – RichieAHB