2014-08-28 15 views
6

Nói rằng tôi có một cấu trúc thư mục CSS LESS như thế này:tập tin Rename dựa trên regex trong Gulp

less/ 
    core/ 
     _main.less 
     header.less 
     body.less 
     footer.less 
    contact/ 
     _main.less 
     form.less 
     details.less 

Tôi muốn viết một nhiệm vụ Gulp rằng sẽ tìm kiếm _main.less file trong mỗi thư mục con của less/ dir, chuyển thông tin này phải nuốt chửng-ít và viết kết quả vào dir css/ như thế này:

css/ 
    core.css 
    contact.css 

_main.less bao gồm các tập tin khác trong đó là thư mục, chỉ có _main.less file này sẽ phải được phân tích, nhưng tôi muốn các tập tin đầu ra có tên của thư mục đó trong

Cho đến nay tôi đã này:.

gulp.src('less/*/*/_main.less') 
    .pipe(less()) 
    .pipe(gulp.dest('css')); 

Nhưng điều này sẽ tạo ra một cấu trúc thư mục như thế này:

css/ 
    core/ 
     _main.css 
    contact/ 
     _main.css 

Nhưng đó không phải là những gì tôi muốn. Tôi đã suy nghĩ để sử dụng một regex để phù hợp với tên thư mục, có được điều này trở lại trong một var matches, và đổi tên các tập tin cho phù hợp. Một cái gì đó như thế này:

gulp.src(/less\/[^\/]+\/([^\/]+)\/_main.less/) 
    .pipe(less()) 
    .pipe(rename(function(context) { 
     context.src.matches[1] + '.css' 
    })) 
    .pipe(gulp.dest('css')); 

Mã này chỉ là một ví dụ. Tôi không thể tìm ra cách để làm một cái gì đó như thế này, hoặc nếu nó thậm chí có thể.

Điều này có khả thi không? Nếu vậy, làm thế nào?

Trả lời

8

Có vẻ như bạn đã có điều này, nhưng có thể không thấy the gulp-rename plugin?

Tôi thậm chí không nghĩ rằng bạn sẽ cần phải sử dụng một RegExp, một cái gì đó như thế này nên làm việc:

var rename = require('gulp-rename'), 
    path = require('path'); // node Path 

//... 

gulp.src('less/**/_main.less') 
    .pipe(less()) 
    .pipe(rename(function(filepath) { 
     // replace file name to that of the parent directory 
     filepath.basename = path.basename(filepath.dirname); 
     // remove parent directory from relative path 
     filepath.dirname = path.dirname(filepath.dirname); 
     // leave extension as-is 
    })) 
    .pipe(gulp.dest('css')); 
Các vấn đề liên quan