2015-12-02 69 views
0

我试图返回扩展名为.css和.styl的文件,位于不同的文件夹中,并在Gulp任务中使用它们,但没有取得太大的成功。我想知道我在这里做错了什么?这是我在这一点上代码:如何在Gulp中匹配并返回各种扩展名的文件?

var pattrn = /(styl|css)$/g; 
var path1 = './dev/**/'; 

var paths = { 
    dev_styles: path1.match(pattrn), 
    build: './build' 
}; 

gulp.task('styles', function() { 
    var processors = [ 
    csswring, 
    autoprefixer({ browsers: [ 'last 2 version' ] }) 
]; 

return gulp 
    .src(paths.dev_styles) 
    .pipe(plugins.postcss(processors)) 
    .pipe(plugins.rename({ suffix: '.min'})) 
    .pipe(gulp.dest(paths.build)); 
}); 

我收到此错误:

Error: Invalid glob argument: null 
+0

**是否正确? –

回答

0

那么,你的问题是,那不是怎么咽的作品。

检查documentation约gulp.src,它指出:

gulp.src(globs[, options]) accept glob or array of globs to read.

这意味着你不需要做花哨(怪异)过滤,指定适当的node-glob syntax就足够了。

再回到你的问题,这将解决它:

gulp.task('styles', function() { 
    var processors = [ 
    csswring, 
    autoprefixer({ browsers: ['last 2 version' ] }) 
    ]; 
    return gulp 
    .src('root_to_styl_files/**/*.styl') // Will get all .styl files in the specified folder & subfolders 
    .pipe(plugins.postcss(processors)) 
    .pipe(plugins.rename({ suffix: '.min' })) 
    .pipe(gulp.dest('./build')); 
}); 
+0

我之前曾尝试过,它完成了这项工作,但并不完全如我所愿。它将处理后的.styl和.css文件放在不同的文件夹中(重现每个处理文件的原始文件夹结构),而不是连接它们并返回单个文件。碰巧,gulp-concat做了诡计。 – pierrebonbon

+0

连接两个文件.styl和.css似乎并没有很好地发挥作用,所以我最终保持了文件的分离状态,并用gulp-flatten来压扁文件夹结构。无论如何,感谢您的链接和提示,它是现货! – pierrebonbon

0

阵列水珠的是解决方案。正如avcajaraville所建议的那样,不需要正则表达式。要进一步处理

.src(['./root_to_files/**/*.css', './root_to_files/**/*.styl']), 

这将返回与模式相匹配的文件,使其可通过任何一饮而尽(管道)插件,您有:这里有一个片段,做的工作。如果没有进一步处理(例如平坦,干净等),它们将最终放在目标文件夹(dest)上,重现原始文件夹结构。

.pipe(gulp.dest('./build')); 
相关问题