2014-05-25 23 views
5

Tôi cần áp dụng tác vụ xây dựng cho các tệp cụ thể. Để tìm chúng, tôi sử dụng mẫu điển hình. Nhưng tôi không thể hiểu làm thế nào để vượt qua các đối số (đường dẫn tập tin) từ gulp.src.Làm thế nào để bắt đầu nhiệm vụ Gulp với params?

Giải pháp mong muốn.

gulp.task('bundles', function() { 
    gulp.src('bundles/**/*.js'). 
    pipe(gulp.start('build', file.path)); 
}); 

gulp.task('build', function (path) { 
    // use here 
}); 

Trả lời

1

Câu hỏi là một chút cũ và tôi không chắc tôi hoàn toàn hiểu những gì bạn đang cố gắng để đạt được ở đây, nhưng tôi nghĩ rằng những gì bạn đang tìm kiếm là lazypipe

Bạn có thể muốn làm rõ câu hỏi của bạn nếu đó là không phải những gì bạn đang tìm kiếm

Ví dụ Cách sử dụng:

var lazypipe = require('lazypipe'), 
g = require('gulp-load-plugins')({lazy: true}), 

jsTransformPipe = lazypipe() 
    .pipe(g.jshint) // <-- Notice the notation: g.jshint, not g.jshint() 
    .pipe(g.concat, 'bundle.js'), // <-- Notice how the param is passed to g.concat, as a second param to .pipe() 

jsSourcePipe = lazypipe() 
    .pipe(gulp.src, './**/*.js'); 

gulp.task('bundle', function() { 
    jsSourcePipe() 
     .pipe(jsTransformPipe()) // <-- You execute the lazypipe by calling it as a function 
     .pipe(gulp.dest('../build/'); 
}); 

với lazypipe về cơ bản bạn tạo ra một đường ống để sử dụng trong tương lai; hy vọng điều này giúp đỡ

1

(không thể bình luận vì đại diện, xin lỗi)

tôi cho rằng mẫu mã của bạn không được lấp đầy với tất cả mọi thứ, nhưng tại sao bạn không kết hợp những nhiệm vụ và sử dụng gulp.src của bạn() trong nhiệm vụ xây dựng của bạn thay vì gọi một nhiệm vụ khác.

Có thể đó là hữu ích cho bạn, nhưng với những gì bạn đang hiển thị tôi không thể tìm thấy một lời giải thích cho lý do tại sao bạn làm điều này thay vì chỉ đơn giản là đi với một cái gì đó như:

gulp.task('build', function (path) { 
    gulp.src('bundles/**/*.js) 
    //Your code for this task 
}); 

Tất nhiên, nó loại bỏ các bó nhiệm vụ, nhưng nó không hữu ích như. Đừng ngần ngại bình luận nếu tôi sai và tôi sẽ cố gắng giúp đỡ bạn nhiều nhất có thể.

0

Trước hết, gulp.task('build', function (path) sẽ không bao giờ hoạt động. Đối số hợp lệ duy nhất cho các nhiệm vụ gulp là một cuộc gọi lại để báo hiệu hoàn thành nhiệm vụ không đồng bộ. Nếu bạn đã cố gắng chạy trên, gulp sẽ mong đợi path là một hàm và nhiệm vụ sẽ không bao giờ hoàn thành trừ khi hàm đó được gọi. Trong ví dụ này, nhiệm vụ 'build' phải là một hàm thông thường được gọi từ pipe 'bundles', không phải là một nhiệm vụ.

Câu hỏi hay hơn là: Làm cách nào để chạy chức năng tùy chỉnh bên trong ống gulp? Các plugin như gulp-tap có thể khiến bạn gần gũi, nhưng không khó để tạo ra những gì thực chất là một plugin gulp nội tuyến để gọi hàm của bạn.

Ống Gulp nhận được through2 luồng đối tượng có chứa vinyl file object, mã hóa và gọi lại. Dưới đây là một bộ xương cơ bản để gọi bất kỳ chức năng tùy ý chống lại các tập tin trong một đường ống ngụm:

var gulp = require('gulp'); 
var through = require('through2'); 

gulp.task('stack', function() { 
    return gulp.src('./src/*.js') 
    .pipe(through.obj(function(file, enc, cb) { 
     // file.path is the full path to the file 
     myBuildFunction(file.path); 
     cb(null, file); 
    })) 
    .pipe(gulp.dest('./build/')); 
}) 

Đây có thể là vô cùng mạnh mẽ. Để sửa đổi nội dung của tệp, chỉ cần thay đổi bộ đệm file.contents. Để đổi tên hoặc di chuyển tệp, hãy thay đổi file.path. Tất cả mọi thứ có thể được thực hiện trong ống bản địa của gulp.

Các vấn đề liên quan