使用gulp复制带条件的指定文件

时间:2016-03-30 14:46:44

标签: node.js gulp

我正在尝试使用gulp将我的供应商文件复制到我的dev文件夹。当我处于开发模式时,我希望只复制未经文明的文件,如果未通知则不存在复制缩小的文件。在生产模式中,如果文件不存在,我希望复制minifed文件缩小普通文件。

我的文件夹结构

js
  app.js
jquery
  jquery.min.js
  jquery.js
fontawesome
  fontawesome.min.js
  fontawesome.min.css
  fonts.ttf...

这是我写的基本内容。

var scriptsPath = '../vendor/';
function getFolders(dir) {
    return fs.readdirSync(dir)
        .filter(function(file) {
            return fs.statSync(path.join(dir, file)).isDirectory();
        });
}
gulp.task('vendor', function() {
    var folders = getFolders(scriptsPath);
    var cssFilter = $.filter('**/*.css')
    var tasks = folders.map(function(folder) {
      var jsFilter;
    if (isProduction) {
        jsFilter = $.filter('**/*.min.js');
    } else {
        jsFilter = $.filter(['**/*.js', '!**/*.min.js']);
    }
        return gulp.src(path.join(scriptsPath, '**/'))
            .pipe(jsFilter)
            .pipe($.if(useSourceMaps, $.sourcemaps.init()))
            .pipe($.if(isProduction, $.uglify({preserveComments: 'some'})))
            .on('error', handleError)
            .pipe(jsFilter.restore())
            .pipe(cssFilter)
            .pipe($.if( isProduction, $.minifyCss() ))
            .on('error', handleError)
            .pipe(cssFilter.restore())
            .on('error', handleError)
            .pipe(gulp.dest(build.vendor.js));
    });
    return es.concat.apply(null, tasks);
});

我正在尝试最后两天使用gulp-if&一些方法。但还没有得到解决方案。谢谢。

1 个答案:

答案 0 :(得分:1)

您正试图将更多内容纳入vendor任务中。使用JS文件执行的操作与使用CSS文件执行的操作完全无关。这很难读。

尝试将gulp-filter拆分为vendorvendor-js等较小的任务,而不是使用vendor-css,然后将它们声明为{{1}的依赖项任务:

vendor

您的gulp.task('vendor', ['vendor-js', 'vendor-css' /* etc ... */]); 任务可能如下所示:

vendor-js

从现在开始,根据您的具体需求进行调整应该是相当简单的。